字段的顺序在 lucene 查询中是否重要?
例如,
q = A && B && C
假设 A 出现在一百万个文档中,B 在 10000 个中,C 在 1000 个中。
虽然无论您 AND A、B 和 C 的顺序如何,结果都是相同的,但以下查询的响应时间会有所不同吗?
C&&B&&A
A && B && C
Lucene/Solr 是否为给定查询在空间和时间方面选择最佳查询执行计划?
不管查询是A AND B AND C
还是C AND B AND A
,查询执行时间都是一样的。
此外,如果您执行 AND ,则需要存在所有查询词才能返回文档,因此文档频率将是相同的。
但是,术语频率会有所不同,因此得分也会有所不同。
Lucene 的定义是“一个高性能的全功能文本搜索引擎库 [...]”。分析每个术语出现的文档数量很容易决定执行 AND 操作和 Lucene 的顺序,当然可以。
如果您对该算法感兴趣,则可以在具有最低基数的项之间执行 AND 以获得最佳性能,并一直持续到具有最高基数的项。
通过这种方式,由于对排序后的列表 [O(n+m) 和两个发布列表的 n 和 m 长度] 上的合并算法和跳过指针,您可以迭代更少数量的 docID。