2014-02-25 242 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索引文件夾的完整路徑,而不是相對的。