术语不存在查询在lucene中是如何工作的?

aoyhnmkz  于 2022-11-07  发布在  Lucene
关注(0)|答案(1)|浏览(178)

我已经开始阅读有关Lucene中的索引和ElasticSearch中的分片的内容。有一件事我一直不能理解,像这样的查询是如何查找索引的。

field-x contains term1 but not term2

它是否查找stored字段。

wnavrhmk

wnavrhmk1#

存储字段中的数据可能相对较大(可能是整本书的文本)。如何有效地搜索该文本中的“排除”术语?通过索引它!
为了支持field-x contains term1,我们已经这样做了。所以,不,我们不会使用存储字段,而是使用索引数据来查找term2-并从term1结果中删除这些结果。
(我并不是说这就是Lucene所使用的算法,因为Lucene在幕后可能做了一些重要的优化,但它不会使用存储字段的内容。)
此外,如果索引数据 * 不 * 包含任何存储字段,查询仍然有效。您可以自己尝试一下。
存储字段在显示结果时非常有用。Field文档中提供了以下内容:
存储字段:用于在汇总结果中检索的仅存储值
实际上,您可能永远都不想在存储字段中存储大量数据(例如,一本完整的书)。您可以存储数据的摘要--无论如何,这将使它不适合用于查询。
另一个考虑:你也可以问“field-x contains term1 and also term2是如何工作的?它的工作方式与第一个例子相同--只是你没有从term1结果中删除term2结果--相反,你要找到两组结果之间的交集(如果两项都是强制性的),或者你要找到两组结果的并集(如果两项都是可选的)......等等。

相关问题