我正在查询 Lucene 索引文件,该文件的结构不是我构建的。该索引包含具有如下结构字段的文档:
正如您所看到的,“type”字段始终为空,但是“all”字段包含以可搜索的方式格式化的数据,并且包含 type=ta
类型的语法。
奇怪的是,当我使用 type:ta
查询此索引时,它实际上会输出一些内容,即使类型字段始终为空。
这里发生了什么?
编辑
经过更多谷歌搜索后,我发现了一个奇怪的概念(至少对我来说,来自 SQL 数据库背景),数据可以以不同的方式存储(Store.YES 和 Store.NO)。 Lucene indexing: Store and indexing modes explained
这对我来说是一个非常不寻常的概念,因为我没有找到很多不存储数据的理由。使用 Store.NO 的原因是什么?我很可能总是希望将数据放在那里,即使我没有在任何地方显示它......我的意思是,如果数据被索引,它无论如何都必须存储,对吧?
最佳答案
What's the reason behind using Store.NO?
考虑查询:
- 哪些文档包含术语“foo”?
- 文档“1234”包含哪些术语?
第一个索引将映射term -> document
。第二个将映射document -> term
。大多数人只想使用Lucene进行第一类查询,因此他们只构建第一类索引(Store.NO)。如果您想执行第二种类型的查询,则需要构建两种类型的索引。这会占用更多空间。 (理论上可以循环遍历所有术语并找出文档,而无需实际构建此索引,但它确实很慢。)
“反向索引”可能是比“存储”更合适的名称。
关于java - Lucene 查询返回我不期望的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4105008/