2016-03-03 57 views
0

在网页搜索引擎中,倒排索引通常非常大,所以搜索引擎在获得足够的结果时会退出搜索。由于遍历到长倒排索引的尾部是耗时的。lucene是否在搜索时遍历整个倒排索引?

Lucene如何处理这种情况?例如,如果术语“A”的倒排索引由10000个文档组成,则在搜索“A”获得10个结果时,Lucene将遍历所有这10000个文档,然后返回10个结果,或者当检索到足够的结果时返回10个结果结果即使没有达到倒排索引的结尾?

回答

1

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

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

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