【问题标题】:how to retrieve all documents that have the high score in Lucene如何在Lucene中检索所有得分高的文档
【发布时间】:2011-10-26 05:40:51
【问题描述】:

对于特定的查询类型,我得到许多具有相同最高分的文档。每次调用此查询时,我想随机提取 10 个文档。因此,执行相同搜索的用户每次都会得到不同的结果。这听起来确实是一个非常糟糕的主意,但它实际上具有商业意义。

我现在的想法是从索引中获取所有得分最高的文档,然后从中随机选择 10 个。

我该怎么做?还有其他方法吗?

请注意,我仍然希望最高分保持在首位,只是随机排列。我不想在随机播放中包含较低的分数,也不想将它们排除在列表底部。

非常感谢!

【问题讨论】:

    标签: lucene lucene.net


    【解决方案1】:

    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 实现。

    【讨论】:

    • 我无法找到一个 Lucene 等价物,如果有人知道,请分享。谢谢!
    【解决方案2】:

    有关使用 CustomScoreQuery 随机化搜索结果的信息,请参阅此链接 (“Shuffling” a Lucene Hits result set)。

    【讨论】:

    • 谢谢!很遗憾。这将随机化所有文档。我只想在所有得分最高的文档中随机化。
    • @user277498 你可以尝试随机化10%左右,这样你可以获得类似的效果(虽然不一样)
    • 我不明白。随机化 10% 是什么意思?
    • @user277498 假设原始分数为 0.5,那么您可以随机添加或减去小于 0.025 的数字,得到介于 0.475 和 0.525 之间的新分数
    猜你喜欢
    • 1970-01-01
    • 2012-02-22
    • 2014-01-29
    • 2011-11-04
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    相关资源
    最近更新 更多