【问题标题】:Lucene search return different resultsLucene 搜索返回不同的结果
【发布时间】:2014-03-27 08:09:18
【问题描述】:

我的 Java EE 应用程序使用 Lucene 4。在 Lucene 索引中,我的全名是 1000 万人。当我使用搜索时,Lucene 返回不同的结果。相同的应用程序在 Windows 上的开发环境中运行良好,在 AIX 上的测试环境中运行良好,但在生产服务器上 Lucene 搜索返回的记录要少得多。相同的查询返回 800 个开发结果和 20 个生产结果。我们将在生产环境中尝试 AIX 和 Red Hat,但仍然没有成功。

我将 Lucene 索引文件从生产环境复制到开发环境,并使用相同的应用程序搜索了相同的查询:在我的环境中一切正常,有 800 个结果。我使用调试启动应用程序,将 Lucene 查询复制为文本,并在我的环境中将此查询与 Luke 一起使用 - 有 800 个结果。生产负载高,我会尝试加载开发环境,但是Lucene运行稳定,总是返回800。

在哪里可以找到问题的根源?

【问题讨论】:

  • 这通常是由于不同的分析器造成的,尤其是当你混合使用 java 和 .net 时。您能否验证您在所有环境中使用相同的分析器,具有相同的设置和停用词?
  • 在所有环境中工作的源代码相同,但 JRE 版本不同。索引更新时,使用 StandardAnalyzer。在查询期间,分析器未在源代码中明确指出。我会尝试在 Luke 中使用一些不同的分析器进行查询,但总是有 800 个结果
  • 您将索引存储在文件系统或内存中的什么位置?
  • 索引存储在文件系统中,使用 FSDirectory.open(file) 打开。没有从文件系统到 RAMDirectory 的传输。

标签: unix aix lucene


【解决方案1】:

在更新安装过程中,系统管理员在服务器配置中指定了Lucene索引的相对路径,然后启动应用服务器。首次启动后,我们的应用程序对数据库中的数据进行全索引,然后每两小时进行一次增量索引。我们的服务器每晚都会通过 chron 任务重启,所以在自动重启后,Lucene 索引的相对路径会改变。下一个增量索引创建在不同文件夹中的新索引文件并在那里保存更改。当我向系统管理员询问索引文件时,他们给了我首先创建的大索引,我会分析它们,但实际上,服务器使用不同的索引文件。

所以,答案是:需要指定Lucene索引文件夹的完整路径,而不是相对路径。

【讨论】: