W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
近實(shí)時(shí)搜索
什么是 Solr 近實(shí)時(shí)搜索?近實(shí)時(shí)(Near Real Time,簡(jiǎn)稱NRT)搜索意味著文檔在被索引后幾乎立即可用于搜索。
這允許在“接近”實(shí)時(shí)看到文檔的添加和更新。在提交過程中,Solr 不會(huì)阻止更新。在打開新的索引和返回的新搜索之前,它也不會(huì)等待后臺(tái)合并完成。
通過使用 NRT,您可以將 commit 命令修改為軟提交,這樣可以避免可能造成代價(jià)的標(biāo)準(zhǔn)提交的部分內(nèi)容。您仍然希望執(zhí)行標(biāo)準(zhǔn)提交以確保文檔處于穩(wěn)定存儲(chǔ)狀態(tài),但軟提交允許您在此期間同時(shí)查看索引的非常近實(shí)時(shí)視圖。
但是,要特別注意緩存和自動(dòng)設(shè)置(autowarm)設(shè)置,因?yàn)樗鼈儠?huì)對(duì) NRT 性能產(chǎn)生很大的影響。
提交操作使索引更改對(duì)新的搜索請(qǐng)求可見。一個(gè)硬提交(hard commit)使用事務(wù)日志來獲得的最新文檔更改的ID,并在索引文件上調(diào)用 fsync,以確保它們已被刷新到穩(wěn)定的存儲(chǔ),并且不會(huì)因電源故障而導(dǎo)致數(shù)據(jù)丟失。當(dāng)前的事務(wù)日志被關(guān)閉,并打開一個(gè)新的事務(wù)日志。有關(guān)數(shù)據(jù)丟失問題,請(qǐng)參閱下面的“事務(wù)日志”討論。
軟提交(soft commit)的速度要快得多,因?yàn)樗粫?huì)使索引更改可見,而不 fsync 索引文件,或者編寫新的索引描述符或啟動(dòng)新的事務(wù)日志。搜索具有 NRT 要求(希望對(duì)搜索快速可見的索引更改)的集合將希望經(jīng)常進(jìn)行軟提交,但不太經(jīng)常提交。softCommit 可能花費(fèi)較少,但它不是免費(fèi)的,因?yàn)樗赡軙?huì)降低吞吐量。有關(guān)數(shù)據(jù)丟失問題,請(qǐng)參閱下面的“事務(wù)日志”討論。
優(yōu)化就像硬提交, 除非它強(qiáng)制所有的索引段首先合并到單個(gè)段中。根據(jù)使用情況,這個(gè)操作應(yīng)該很少進(jìn)行,因?yàn)樗婕白x取和重寫整個(gè)索引。片段通常會(huì)隨著時(shí)間的推移而合并(由合并政策確定),而優(yōu)化只是迫使這些合并立即發(fā)生。
軟提交使用兩個(gè)參數(shù):maxDocs 和 maxTime。
整數(shù)。定義在將它們推送到索引之前要排隊(duì)的文檔的數(shù)量。它與update_handler_autosoftcommit_max_time
參數(shù)一起工作,如果達(dá)到任何限制,文檔將被推送到索引。
將文檔推送到索引之前要等待的毫秒數(shù)。它與update_handler_autosoftcommit_max_docs
參數(shù)一起工作,如果達(dá)到任何限制,文檔將被推送到索引。
使用 maxDocs 和 maxTime 可以適當(dāng)?shù)卣{(diào)整您的提交策略。
事務(wù)日志是至少最后一個(gè) N (默認(rèn) 100) 文檔索引的 "滾動(dòng)窗口"。Tlogs 在 solrconfig. xml 中配置,包括 N 的值。當(dāng)前的事務(wù)日志是關(guān)閉的,每當(dāng)發(fā)生各種硬性提交時(shí)都會(huì)打開一個(gè)新的事務(wù)日志。軟提交對(duì)事務(wù)日志沒有影響。
啟用 tlog 時(shí),添加到索引中的文檔將在索引調(diào)用返回到客戶端之前寫入 tlog。如果發(fā)生不正常的關(guān)閉(例如:斷電、JVM 崩潰等),則任何寫入到 Solr 停止時(shí)打開的 tlog 的文檔將在啟動(dòng)時(shí)重播。
當(dāng) Solr 被正常關(guān)閉(即使用 bin/solr stop 命令等)時(shí),Solr 將關(guān)閉 tlog 文件和索引段,因此在啟動(dòng)時(shí)不需要重播。
自動(dòng)提交也使用 maxDocs 和 maxTime 參數(shù)。然而,在許多策略中使用硬性 autocommit 和 autosoftcommit 實(shí)現(xiàn)更靈活的提交是有用的。
一個(gè)常見的配置是每隔1 - 10分鐘執(zhí)行一次硬性 autocommit,每秒鐘執(zhí)行一次 autosoftcommit。使用這種配置,新文檔將在添加后大約一秒鐘內(nèi)顯示出來,如果斷電,軟提交將會(huì)丟失,除非已經(jīng)完成了硬提交。
例如:
<autoSoftCommit>
<maxTime>1000</maxTime>
</autoSoftCommit>
最好使用 maxTime 而不是 maxDocs 修改 autoSoftCommit,尤其是在通過提交操作對(duì)大量文檔進(jìn)行索引時(shí)。關(guān)閉 autoSoftCommit 批量索引也是更好的選擇。
阻塞,直到打開新的搜索器并將其注冊(cè)為主要查詢搜索器,使更改可見。默認(rèn)是true
。
打開一個(gè)新的搜索器,使目前為止搜索到的所有文檔都可見。默認(rèn)是true
。
執(zhí)行一個(gè)軟提交。這將更快地刷新索引的視圖,但不保證文檔穩(wěn)定存儲(chǔ)。默認(rèn)是false
。
僅適用于commit
是否從段中清除已刪除的數(shù)據(jù)。默認(rèn)是false
。
僅適用于optimize
最多可以優(yōu)化的部分。默認(rèn)是1
。
提交和優(yōu)化具有可選屬性的示例:
<commit waitSearcher="false"/>
<commit waitSearcher="false" expungeDeletes="true"/>
<optimize waitSearcher="false"/>
更新處理程序也可以獲取 commit 相關(guān)參數(shù)作為更新 URL 的一部分。這個(gè)例子添加了一個(gè)小的測(cè)試文檔,并在之后立即產(chǎn)生一個(gè)明確的提交:
http://localhost:8983/solr/my_collection/update?stream.body=<add><doc>
<field name="id">testdoc</field></doc></add>&commit=true
或者,您可能想要使用這個(gè):
http://localhost:8983/solr/my_collection/update?stream.body=<optimize/>
這個(gè)例子使得索引被優(yōu)化到最多10個(gè)段,但是不會(huì)等待,直到完成(waitFlush=false):
curl 'http://localhost:8983/solr/my_collection/update?optimize=true&maxSegments=10&waitFlush=false'
這個(gè)例子增加了一個(gè)小小的測(cè)試文檔,包含了 commitWithin,告訴 Solr 確保文檔不晚于10秒后提交(這個(gè)方法通常優(yōu)于顯式提交):
curl http://localhost:8983/solr/my_collection/update?commitWithin=10000
-H "Content-Type: text/xml" --data-binary '<add><doc><field name="id">testdoc</field></doc></add>'
雖然stream.body
功能對(duì)于開發(fā)和測(cè)試非常重要,但它通常不應(yīng)該在生產(chǎn)系統(tǒng)中啟用,因?yàn)樗试S用戶讀取可能改變系統(tǒng)狀態(tài)的權(quán)限。該功能在默認(rèn)情況下是禁用的。有關(guān)詳細(xì)信息,請(qǐng)參見SolrConfig 中的 RequestDispatcher。
這些 commitWithin 設(shè)置允許強(qiáng)制文檔提交在規(guī)定的時(shí)間段內(nèi)發(fā)生。這在Solr近實(shí)時(shí)搜索中最常使用,因此默認(rèn)情況下是執(zhí)行軟提交。但是,這并沒有將新文檔復(fù)制到主/從環(huán)境中的從屬服務(wù)器。如果這是實(shí)現(xiàn)的要求,則可以通過添加一個(gè)參數(shù)來強(qiáng)制執(zhí)行一個(gè)硬提交,如下例所示:
<commitWithin>
<softCommit>false</softCommit>
</commitWithin>
有了這個(gè)配置,當(dāng)您將 commitWithin 作為更新消息的一部分進(jìn)行調(diào)用時(shí),每次都會(huì)自動(dòng)執(zhí)行一個(gè)硬性提交。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: