在网络搜索引擎中,反向索引通常非常大,因此搜索引擎会在获得足够的结果时退出搜索。由于遍历长反向索引的尾部非常耗时。
Lucene如何处理此案?
例如,如果一个倒置的术语“A'搜索“A' A'对于10个结果,Lucene会通过所有这10000个文档然后返回10个结果,或者当检索到足够的结果时返回10个结果,即使它没有达到倒排索引的末尾吗?
答案 0 :(得分:1)
Lucene确实会访问所有10k的比赛,计算每场比赛的得分,然后放入一堆以计算前k个命中。
lucene / misc模块有一个SortingMergePolicy,它允许您根据某个字段对合并的段进行排序(在Web索引上,例如,这可能是页面排名)。这样,如果要在搜索时根据此字段对文档进行排序(或者更常见的是,如果排序顺序与此字段的值强烈相关),则可以在收集到足够匹配后立即停止收集每个段的文档。
这是目前非常专业的功能,但我们计划让它更易于使用,请参阅https://issues.apache.org/jira/browse/LUCENE-6766。