Lucene增量索引的搜尋結果重複的問題

2021-08-31 02:54:17 字數 1091 閱讀 9794

new indexwriter(indexdir, new standardanalyzer(), false, new indexwriter.maxfieldlength(10000));

建立索引的關鍵步驟就是對indexwriter新增document,我是對文字檔案進行分析的

file f = new file("text.txt");

document doc = new document();

doc.add(new field("content", new filereader(f))); // 由於檔案內容比較大,沒有儲存,如果是要做高亮搜尋詞的話,需要儲存,分析,並且指定詞向量引數field.termvector

doc.add(new field("title", "要被索引的字串", field.store.yes, field.index.analyzed));

writer.adddocument(doc);

引數的說明:

field.store.yes表示要對這個字串進行儲存,field.index.analyzed表示要對個字串進行分析

雖然設定了增量索引,如果執行兩次這個索引的**,然後去搜尋的話,會出現兩條相同的結果。考慮到,一條doc對應乙個檔案,便想著給doc新增乙個唯一標示的字段,索引之前檢測是否存在,如果已經存在刪除之

doc.add(new field("fileid", "自定義的id", field.store.yes, field.index.not_analyzed));

儲存這個id欄位,但是不要對這個字段進行分析,如果分析了,對索引結果會有影響。剛開始計畫使用文字路徑設定id,但是不起作用,只有檔名的話可以,但沒有唯一性,id的定製很重要。

刪除doc的**

writer.deletedocuments(new term("fileid", "自定義的id"));

[url]

為保持資料一致,作者建議使用indexwriter來做刪除操作

lucene索引合併與增量索引

利用 lucene,在建立索引的工程中你可以充分利用機器的硬體資源來提高索引的效率。當你需要索引大量的檔案時,你會注意到索引過程的 瓶頸是在 往磁碟上寫索引檔案的過程中。為了解決這個問題,lucene 在記憶體中持有一塊緩衝區。但我們如何控制 lucene 的緩衝區呢?幸運的是,lucene 的類 ...

lucene索引合併與增量索引

利用 lucene,在建立索引的工程中你可以充分利用機器的硬體資源來提高索引的效率。當你需要索引大量的檔案時,你會注意到索引過程的瓶頸是在往磁碟上寫索引檔案的過程中。為了解決這個問題,lucene 在記憶體中持有一塊緩衝區。但我們如何控制 lucene 的緩衝區呢?幸運的是,lucene 的類 in...

lucene索引合併與增量索引

利用 lucene,在建立索引的工程中你可以充分利用機器的硬體資源來提高索引的效率。當你需要索引大量的檔案時,你會注意到索引過程的瓶頸是在往磁碟上寫索引檔案的過程中。為了解決這個問題,lucene 在記憶體中持有一塊緩衝區。但我們如何控制 lucene 的緩衝區呢?幸運的是,lucene 的類 in...