solr实现随机排序

实现方式

schema.xml文件中配置一个随机类型的字段

<dynamicField name="rand*" type="random" indexed="true" stored="true" />

配置完成后,重启下solr服务,在随机查询中加入这个字段的排序就可以实现随机取数据了

场景1:在solr中查询某个条件的数据列表,随机返回N条数据

使用如下:

SolrQuery solrQuery = new SolrQuery("*:*");
solrQuery.setStart(1);
solrQuery.setRows(10);
// 随机排序
String randomField = "rand_" + ThreadLocalRandom.current().nextInt(100000);
solrQuery.addSort(randomField, SolrQuery.ORDER.desc);
场景2:分组后的数据随机取值
int num = ThreadLocalRandom.current().nextInt(100000);
String randomField = "rand_" + num + " ASC";
SolrQuery solrQuery = new SolrQuery("*:*");
solrQuery.setParam(GroupParams.GROUP, true)
         .setParam(GroupParams.GROUP_FIELD, fieldName)
         .setParam(GroupParams.GROUP_LIMIT, String.valueOf(1))
         .setParam(GroupParams.GROUP_SORT, randomField)
         .setParam(GroupParams.GROUP_TOTAL_COUNT, true);