2014-02-25 50 views
0

我的Java EE应用程序使用Lucene 4.在Lucene索引中,我有1,000万个人的全名。当我使用搜索时,Lucene会返回不同的结果。相同的应用程序在Windows上的开发环境中工作正常,在AIX上测试环境,但在生产服务器上,Lucene搜索返回的记录少得多。同样的查询返回800个开发结果和20个生产结果。我们将在产品上尝试AIX和Red Hat,但仍然没有运气。Lucene搜索返回不同的结果

我将Lucene索引文件从生产环境复制到开发环境,并搜索了相同的查询和相同的应用程序:在我的环境中,所有工作正常,有800个结果。我开始调试应用程序,将Lucene查询复制为文本,并在我的环境中使用Luke的查询 - 有800个结果。生产负载很高,我会尽量加载开发环境,但是Lucene工作稳定并且总是返回800.

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

+0

这通常是由于不同的分析仪,特别是如果你在Java和.net之间混合。您是否可以验证您是否在所有环境中使用相同的分析仪,具有相同的设置和停用词? – sisve

+0

在所有环境中都有相同的源代码,但JRE的版本不同。索引更新时,使用StandardAnalyzer。在查询过程中,未在源代码中明确指示分析器。我会尝试在Luke中使用一些不同的分析器进行查询,但总会有800个结果 – bobzer

+0

您在哪里将索引存储在文件系统或内存中? – Yogesh

回答

0

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

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