簡體   English   中英

Apache Lucene的實現

[英]Implementation of Apache Lucene

我正在閱讀過去幾周的Apache Lucene的源代碼,並試圖找出主要負責在磁盤上編寫發布列表/索引的方法或類。 我已經閱讀了很多有關索引的文章,並試圖找到在將索引寫到磁盤上的過程中正在調用某種方法的地方,但是失敗了。 我知道某些內部緩沖區已滿時會定期寫入索引或發布列表。 如果有人已經閱讀了該代碼或知道該怎么做,請告訴。 謝謝

我不知道答案,但是我對此也很好奇。 搜索時間過長之后,我在indexWriter頁面上發現了這一點。

public final void commit()引發IOException將所有待處理的更改(添加和刪除的文檔,段合並,添加的索引等)提交到索引,並同步所有引用的索引文件,以便讀者可以看到更改和索引更新將在操作系統或機器崩潰或斷電的情況下幸免。 請注意,這並不等待任何正在運行的后台合並完成。 這可能是一項昂貴的操作,因此您應該在應用程序中測試成本,並僅在確實必要時才進行測試。

請注意,此操作在索引文件上調用Directory.sync。 在文件內容和元數據穩定存儲之前,該調用不應返回。 對於FSDirectory,這將調用操作系統的fsync。 但是要當心:某些硬件設備實際上甚至在fsync期間都可能緩存寫操作,並在這些位實際存儲在穩定存儲之前返回,以提供更快的性能。 如果您有這樣的設備,並且沒有備用電池(例如),則在斷電時,它仍可能會丟失數據。 Lucene無法保證此類設備的一致性。

注意:如果此方法遇到OutOfMemoryError,則應立即關閉編寫器。 有關詳情,請參見上文。

指定者:接口TwoPhaseCommit中的commit拋出:IOException另請參見:prepareCommit(),commit(Map)

IndexWriter

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM