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