【问题标题】:Does lucene traverse the whole inverted index when searching?lucene在搜索时会遍历整个倒排索引吗?
【发布时间】:2016-06-17 02:25:11
【问题描述】:

在网络搜索引擎中,倒排索引通常很大,所以当搜索引擎得到足够多的结果时,就会退出搜索。因为遍历一个长倒排索引的尾部非常耗时。

Lucene 如何处理这种情况?

例如,如果术语“A”的倒排索引由 10000 个文档组成,当搜索“A”以获取 10 个结果时,Lucene 是否会遍历所有这 10000 个文档然后返回 10 个结果,或者当检索到足够的结果时返回 10 个结果即使它没有到达倒排索引的末尾?

【问题讨论】:

    标签: lucene search-engine


    【解决方案1】:

    Lucene 确实会访问所有 10k 个匹配项,计算每个匹配项的分数,然后放入堆中以计算前 k 个匹配项。

    lucene/misc 模块有一个 SortingMergePolicy,它允许您根据某个字段(在 Web 索引上,例如页面排名)对合并的段进行排序。这样,如果您想在搜索时基于此字段对文档进行排序(或者更一般地说,如果排序顺序与此字段的值密切相关),您可以在收集到足够的匹配项后立即停止按段收集文档。

    这是目前非常专业的功能,但我们计划使其更易于使用,请参阅https://issues.apache.org/jira/browse/LUCENE-6766

    【讨论】:

    • 将所有结果存储在堆上?如果有一百万个呢?比如当你搜索一个热门关键词时。对所有匹配的结果进行排序会导致性能下降吗?
    猜你喜欢
    • 2016-04-21
    • 2013-07-07
    • 2011-08-15
    • 2011-07-12
    • 2011-10-06
    • 1970-01-01
    • 2012-02-24
    • 2020-02-13
    • 1970-01-01
    相关资源
    最近更新 更多