java - Lucene 查询返回我不期望的内容

标签 java indexing lucene

我正在查询 Lucene 索引文件,该文件的结构不是我构建的。该索引包含具有如下结构字段的文档:

alt text

正如您所看到的,“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?

考虑查询:

  1. 哪些文档包含术语“foo”?
  2. 文档“1234”包含哪些术语?

第一个索引将映射term -> document。第二个将映射document -> term。大多数人只想使用Lucene进行第一类查询,因此他们只构建第一类索引(Store.NO)。如果您想执行第二种类型的查询,则需要构建两种类型的索引。这会占用更多空间。 (理论上可以循环遍历所有术语并找出文档,而无需实际构建此索引,但它确实很慢。)

“反向索引”可能是比“存储”更合适的名称。

关于java - Lucene 查询返回我不期望的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4105008/

相关文章:

java - 格式化日期并返回日期,而不是字符串

sql-server - SQL Server 索引依赖

ruby - 如何使用每个迭代器获取数组索引或迭代次数?

java - 如何在 Apache Solr 中创建自己的字段并上传文档?

java - ScoreDoc.score的公式。在卢塞恩

java - 通过相对路径从资源加载文件(Spring)

java - 如何防止交易在捕获时关闭(异常 e)?

java - 如何为迷宫/迷宫/地牢 build 墙壁?

jquery - 布局/索引问题?

java - 通过 MultiFields lucene 进行搜索