日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

lucene 增加相关性_事务性Lucene

發(fā)布時(shí)間:2023/12/3 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 lucene 增加相关性_事务性Lucene 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

lucene 增加相關(guān)性

許多用戶不喜歡Lucene API的事務(wù)性語(yǔ)義,以及這在搜索應(yīng)用程序中如何有用。 首先,Lucene實(shí)現(xiàn)了ACID屬性:

  • 一個(gè) tomicity:當(dāng)您在更改(添加,刪除文件) IndexWriter會(huì)話,然后提交,要么全部(如果提交成功)或無(wú)的更改(如果提交失敗)將是可見的,從來(lái)沒(méi)有的東西在兩者之間。 某些方法具有其自己的原子行為:如果調(diào)用updateDocument ,該方法實(shí)現(xiàn)為刪除操作,然后執(zhí)行添加操作,即使打開近實(shí)時(shí)(NRT)閱讀器或從單獨(dú)的線程提交。 同樣,如果使用相對(duì)較新的 addDocuments方法添加文檔塊,則在獲得的任何閱讀器中都不會(huì)看到任何文檔或全部文檔。
  • ?onsistency:如果計(jì)算機(jī)或操作系統(tǒng)崩潰,或JVM崩潰或被殺,或斷電,你的指數(shù)將保持不變(即,未破壞)。 請(qǐng)注意,其他問(wèn)題(例如RAM損壞,CPU翻轉(zhuǎn)或文件系統(tǒng)損壞)仍然很容易損壞索引!
  • 我這樣想 :在IndexWriter進(jìn)行更改時(shí),任何對(duì)搜索索引的IndexReader都不可見,直到您提交或打開新的NRT閱讀器。 一次僅一個(gè)IndexWriter實(shí)例可以更改索引。
  • d urability:一旦commit的回報(bào),所有的改變都被寫入持久性存儲(chǔ)器(假設(shè)你的I / O系統(tǒng)正確實(shí)現(xiàn)fsync )。 如果計(jì)算機(jī)或操作系統(tǒng)崩潰,或者JVM崩潰或被殺死,或者計(jì)算機(jī)斷電,則所有更改仍將存在于索引中。

Lucene提供了兩階段的提交 API:調(diào)用prepareCommit方法來(lái)完成所有艱苦的工作(應(yīng)用緩沖的刪除,編寫緩沖的文檔,fsync文件)。 如果出現(xiàn)問(wèn)題(例如磁盤已滿),幾乎肯定會(huì)在第一階段發(fā)生。 然后,調(diào)用commit完成事務(wù)。

當(dāng)您關(guān)閉IndexWriter ,它c(diǎn)ommit在IndexWriter調(diào)用commit 。 相反,如果您想放棄自上一次提交以來(lái)的所有更改,請(qǐng)改為調(diào)用rollback方法,該方法也將關(guān)閉編寫器。 您甚至可以回滾CREATE :如果您已有索引,并使用OpenMode.CREATE在其上打開IndexWriter ,然后回滾,則索引將保持不變。 同樣,如果調(diào)用deleteAll然后回滾。

注意,僅在新目錄上打開IndexWriter并不會(huì)創(chuàng)建空提交。 也就是說(shuō),您必須先調(diào)用commit才能在目錄上打開IndexReader 。

Lucene本身并沒(méi)有實(shí)現(xiàn)事務(wù)日志 ,但是很容易在頂層構(gòu)建該層。 例如,流行的搜索服務(wù)器(例如Solr和ElasticSearch )就是這樣做的。

在一個(gè)索引中多次提交

一個(gè)Lucene索引可以自由包含多個(gè)提交; 這是一個(gè)功能強(qiáng)大但經(jīng)常被忽略的功能。 每個(gè)提交都擁有創(chuàng)建提交時(shí)所存在的索引的時(shí)間點(diǎn)視圖。

這類似于ZFS和即將出現(xiàn)的Btrfs等現(xiàn)代文件系統(tǒng)中可用的快照和可寫克隆。 實(shí)際上,Lucene能夠基于相同的根本原因有效地公開多個(gè)提交:所有索引段和文件都是一次寫入的,就像ZFS和Btrfs中的文件塊一樣。

要在索引中保存多個(gè)提交,只需實(shí)現(xiàn)自己的IndexDeletionPolicy并將其傳遞給IndexWriter 。 這是Lucene用來(lái)了解應(yīng)刪除哪些提交的類: IndexWriter在打開索引時(shí)以及每次提交成功時(shí)都會(huì)調(diào)用它。 默認(rèn)策略KeepOnlyLastCommitDeletionPolicy刪除除最后一次提交以外的所有內(nèi)容。 如果您使用NoDeletionPolicy則將保留每個(gè)提交!

您可以將userData ( Map<String,String> )傳遞給commit ,以記錄有關(guān)該提交的自定義信息(對(duì)Lucene不透明),然后使用IndexReader.listCommits在索引中查找所有提交。 找到提交后,您可以在其上打開IndexReader來(lái)搜索該提交時(shí)的索引。

您還可以在先前的提交上打開IndexWriter ,以有效地回滾之后的所有更改:這與rollback方法類似,不同之處在于,它使您可以跨提交進(jìn)行回滾,而不僅僅是在當(dāng)前IndexWriter會(huì)話中進(jìn)行的更改。

即使使用OpenMode.CREATE打開索引,舊提交仍將保留。 當(dāng)IndexReader仍在搜索舊提交時(shí),傳遞OpenMode.CREATE也可以。 這可以實(shí)現(xiàn)有趣的用例,例如在每次提交之間完全重新索引您的內(nèi)容,而不會(huì)影響任何開放的讀者。

結(jié)合所有這些有趣的事務(wù)功能,您可以做一些很酷的事情:

  • 使用SnapshotDeletionPolicy或PersistentSnapshotDeletionPolicy 熱備份 :這些刪除策略使“實(shí)時(shí)”備份索引變得很簡(jiǎn)單,而不會(huì)阻止使用IndexWriter進(jìn)行的更改。 備份可以很容易地進(jìn)行增量備份(只需復(fù)制新文件,刪除已刪除的文件),就可以自由限制IO以最大程度地減少對(duì)搜索的干擾。
  • 搜索不同的目錄版本:也許您運(yùn)行了一個(gè)電子商務(wù)網(wǎng)站,但是卻發(fā)布了多個(gè)版本的目錄。 在這種情況下,您可以保留較舊的提交,每次提交都搜索目錄的特定版本,從而使用戶可以選擇要搜索的目錄。
  • 來(lái)自相同初始索引的可重復(fù)索引測(cè)試:也許您想運(yùn)行一堆性能測(cè)試,也許從一個(gè)大的初始索引開始嘗試不同的RAM緩沖區(qū)大小或合并因子。 為此,只需運(yùn)行每個(gè)測(cè)試,但是最后,不要關(guān)閉IndexWriter ,而使用rollback方法將索引快速返回其初始狀態(tài),以準(zhǔn)備進(jìn)行下一個(gè)測(cè)試。
  • 強(qiáng)制將所有索引段合并到單個(gè)段,但同時(shí)保留先前的多段提交。 然后,您可以進(jìn)行測(cè)試以比較多段性能與單段性能。
  • 索引和搜索NFS文件系統(tǒng) :因?yàn)镹FS不能保護(hù)仍處于打開狀態(tài)的文件不被刪除,所以必須使用IndexDeletionPolicy保留每個(gè)提交,直到所有打開的閱讀器都完成了提交(即,重新打開為新的提交)。 簡(jiǎn)單的方法是基于時(shí)間的,例如:不要?jiǎng)h除提交,直到提交時(shí)間為15分鐘,然后始終每5分鐘重新打開閱讀器一次。 沒(méi)有這個(gè),在NFS上搜索時(shí),您將遇到各種可怕的異常。
  • 分布式提交:如果您還有其他資源必須隨原子對(duì)Lucene索引的更改一起提交,則可以使用兩階段提交API。 這很簡(jiǎn)單,但是很容易在第二階段失敗。 為了從這種情況下恢復(fù)過(guò)來(lái),例如,如果Lucene完成了其第二階段的提交,但是數(shù)據(jù)庫(kù)的第二階段遇到了一些錯(cuò)誤,崩潰或斷電,則可以通過(guò)在先前的提交上打開IndexWriter輕松回滾Lucene的提交。
  • 實(shí)驗(yàn)性的索引更改:也許您想嘗試以新的方式重新索引索引的某些子集,但是您不確定它是否會(huì)成功。 在這種情況下,只需保留舊的提交,然后在未解決的情況下回滾,或者如果刪除則刪除舊的提交。
  • 基于時(shí)間的快照:也許您希望自由地回滾到1天,1周前,1個(gè)月前等的索引,因此您可以根據(jù)提交的時(shí)間來(lái)保留提交。

請(qǐng)記住,保持多個(gè)提交活動(dòng)必定會(huì)占用額外的磁盤空間,但是,開銷通常很小,因?yàn)槎鄠€(gè)提交通常會(huì)共享公共段,尤其是較大的舊段。

參考:來(lái)自我們的JCG合作伙伴 Michael Mc Candless的事務(wù)性Lucene,來(lái)自“ 更改比特”博客。

翻譯自: https://www.javacodegeeks.com/2013/06/transactional-lucene.html

lucene 增加相關(guān)性

總結(jié)

以上是生活随笔為你收集整理的lucene 增加相关性_事务性Lucene的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。