【发布时间】: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 的传输。