对于特定的查询类型,我获得了许多具有相同最高分的文档。我想在每次调用此查询时随机提取10个文档。因此,执行相同搜索的用户每次都会得到不同的结果。这听起来像是一个非常糟糕的主意,但实际上它具有商业意义。
我现在的想法是从索引中获取具有最高分的所有文档,然后从这些文档中随机选择10。
我该怎么做?还有另一种方式吗?
请注意,我仍然希望最高分保持在最高分,只是洗牌。我不想在洗牌中包含较低分数,也不要将它们排除在列表底部。
非常感谢!
答案 0 :(得分:0)
Solr / Lucene提供random sort field,您可以随机对文档进行排序 由于您所有文件的分数相同,它们将被随机分类。
<fieldType name="random" class="solr.RandomSortField" />
<dynamicField name="random*" type="random" indexed="true" stored="false"/>
你可以用例如它们对它们进行排序sort=random_1234 desc
生成随机数,例如1234将始终返回新的文档集。
但是,相同的数字将生成相同的集合。
检查lucene.net实现。
答案 1 :(得分:0)
请参阅此链接(“Shuffling” a Lucene Hits result set),了解如何使用CustomScoreQuery
随机化搜索结果。