实现方式
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);
网友评论