2016-11-20 45 views
-1

只要仔細檢查一下:我認爲這是不可能的,如果你想保持這樣的信息以某種方式與索引目錄中的索引文件捆綁在一起,你必須找出一種方法來自己做。從Lucene索引文件中計算分析器,版本等?

很明顯,您可能在不同的目錄中使用不同的分析器,而99%的時間在構建QueryParser時使用正確的分析器非常重要:如果您的QP具有不同的值,可能會出現各種不準確的錯誤結果。

同樣,獲取錯誤版本的索引文件可能會導致完全失敗:再次,您可能會得到不準確的結果。

我想知道Lucene的人是否曾經考慮過將索引文件與這類信息捆綁在一起?同樣我也想知道是否有人知道是否有Lucene衍生應用程序,比如Elasticsearch,可能包含這種機制?

實際上,只要查看索引的「_0」文件(_0.cfe,_0.cfs和_0.si),所有3個文件實際上都包含單詞「Lucene」,看起來後面跟着版本信息。嗯...

PS 發生的其他相關的想法:說你索引某種文本文件(或1000文件)...並且你想保持你的索引是最新的每次它被打開。這樣做的一個顯而易見的方法是比較單個文件的上次修改日期與上次更新索引的時間:現在已過期的任何文檔都需要從索引中刪除與其相關的信息,然後必須重新編制索引。

這種需求必須始終與Lucene索引有關。在索引文件本身包含有用的「元信息」的情況下,通常如何處理它?

回答

0

任何人都對這個問題感興趣:

它從我說,Version包含在索引文件出現。我查看了CheckIndex課程以及您可以從中獲得的各種信息,例如CheckIndex.Status.SegmentInfoStatus,但沒有找到方法來獲得Version。我開始認爲這是故意的,這個想法只是讓Lucene根據需要處理索引的更新。如果是這樣的話,不是一個完全令人滿意的狀態...

至於獲得其他東西,如Analyzer類,似乎你必須自己實現這種「元數據」的東西,如果你想......這個可以通過在其他文件中包含文本文件來完成,或者可以使用IndexData類。當然你的Version也可以這樣存儲。

要編寫這樣的信息,請參閱IndexWriter.setCommitData()

要檢索此類信息,您必須使用IndexReader的幾個(?)子類之一,如DirectoryReader