?
快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

新蒲京澳門賭場網站:Lucene中創建索引的效率和刪除索引的實現

?

越來越多的人使用開源組件 Lucene來開拓自己的搜索引擎。在數據量新蒲京澳門賭場網站不大年夜的環境下,我們不會太關注創建索引的效率;然則新蒲京澳門賭場網站,但數據達到必然的數量是,我們就不得不斟酌若何前進創建索引的機能,以縮短索引創建的光陰。

我們是用Lucene中供給的類IndexWriter來創建索引的,以是我們不妨先看一看IndexWriter類中關系到索引創建效率的幾個措施。

一、SetMergeFactor(合并因子)

SetMergeFactor是節制segment合并頻率的,其抉擇了一個索引塊中包括若干個文檔,當硬盤上的索引塊達到若干時,將它們合并成一個較大年夜的索引塊。當MergeFactor值較大年夜時,天生索引的速率較快。MergeFactor的默認值是10,建議在建立索引前將其設置的大年夜一些。

二、SetMaxBufferedDocs(最大年夜緩存文檔數)

SetMaxBufferedDocs是節制寫入一個新的segment前內存中保存的document的數目,設置較大年夜的數目可以加快建索引速率,默覺得10。

三、SetMaxMergeDocs(最大年夜合并文檔數)

SetMaxMergeDocs是節制一個segment中可以保存的最大年夜document數目,值較小有利于追加索引的速率,默認Integer.MAX_VALUE,無需改動。

在創建大年夜量數據的索引時,我們會發明索引歷程的瓶頸在于大年夜量的磁盤操作,假如內存足夠大年夜的話,我們該當只管即便應用內存,而非硬盤??梢越浻蛇^程SetMaxBufferedDocs來調劑,增大年夜Lucene新蒲京澳門賭場網站應用內存的次數。

假如內存足夠大年夜的話,我們也可以在索引歷程中完全避免應用硬盤。Lucene支持應用文件系統和內存兩種要領創建索引,我們可以先把索引寫入到RAMDirectory,達到必然數量時再批量寫進FSDirectory,削減磁盤操作次數。相關的代碼如下:

RA新蒲京澳門賭場網站MDirectory rmd = new RAMDirectory();

IndexWriter writer = new IndexWriter(rmd, new Stan新蒲京澳門賭場網站dardAnalyzer(), true);

while (not eof)//遍歷

{

Document doc = new Document();

doc.Add(…); //Add Fields

writer.AddDocument(doc);

}

writer.SetUseCompoundFile(true);

writer.Optimize();

writer.Close();

別的,SetUseCompoundFile這個措施可以使Lucene在創建索引庫時,會集并多個 Segments 文件到一個 .cfs 中。此要領有助于削減索引文件數量,對付將來搜索的效率有較大年夜影響。

若必要從索引中刪除某一個或者某一類文檔,IndexReader供給了兩種措施:

reader.DeleteDocument(int docNum)

reader.DeleteDocuments(Term term)。

前者是根據文檔的編號來刪除該文檔,docNum是該文檔進入索引時Lucene的編號,是按照順序編的;后者是刪除滿意某一個前提的多個文檔。

在履行了DeleteDocument或者DeleteDocuments措施后,系統會天生一個*.del的文件,該文件中記錄了刪除的文檔,但并未從物理上刪除這些文檔。此時,這些文檔是受保護的,當應用Document doc = reader.Document(i)來造訪這些受保護的文檔時,Lucene會報“Attempt to access a deleted document”非常。假如一次必要刪除多個文檔時,可以用兩種措施來辦理:

1.刪除一個文檔后,用IndexWriter的Optimize措施來優化索引,這樣我們就可以繼承刪除另一個文檔;

2.先掃描全部索引文件,記錄下必要刪除的文檔在索引中的編號。然后,一次性調用DeleteDocument刪除這些文檔,再調用IndexWriter的Optimize措施來優化索引。

免責聲明:以上內容源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

您可能還會對下面的文章感興趣:

快三平台开户