SolrConfig中的UpdateHandlers

2018-12-11 14:30 更新

本節(jié)中的設(shè)置在solrconfig.xml中的<updateHandler>元素中進(jìn)行配置,可能會(huì)影響索引更新的性能。這些設(shè)置影響在內(nèi)部進(jìn)行更新的方式。<updateHandler>配置不會(huì)影響處理客戶端更新請(qǐng)求的RequestHandler的更高級(jí)配置。

<updateHandler class="solr.DirectUpdateHandler2">
  ...
</updateHandler>

提交(Commits)

發(fā)送到 Solr 的數(shù)據(jù)在被提交到索引之前是不可搜索的。這樣做的原因是,在某些情況下,提交可能會(huì)很慢,并且應(yīng)該與其他可能的提交請(qǐng)求隔離進(jìn)行,以避免覆蓋數(shù)據(jù)。所以,最好提供數(shù)據(jù)提交時(shí)的控制權(quán)。有幾個(gè)選項(xiàng)可用來控制提交的時(shí)間。

commit和softCommit

在Solr中,commit是一個(gè)動(dòng)作,要求Solr將這些改變“提交”到Lucene索引文件中。默認(rèn)情況下,提交操作會(huì)導(dǎo)致所有Lucene索引文件“hard commit”到穩(wěn)定的存儲(chǔ)(磁盤)。當(dāng)客戶端包含具有更新請(qǐng)求的commit=true參數(shù)時(shí),可以確保索引更新完成后,就會(huì)將更新中受添加和刪除影響的所有索引段寫入磁盤。

如果指定了一個(gè)額外的標(biāo)志:softCommit=true,那么Solr執(zhí)行一個(gè)“soft commit”,這意味著Solr會(huì)快速地將您的更改提交到Lucene數(shù)據(jù)結(jié)構(gòu),但不能保證Lucene索引文件被寫入到穩(wěn)定的存儲(chǔ)中。這是近實(shí)時(shí)存儲(chǔ)的一個(gè)實(shí)現(xiàn),這個(gè)功能可以提高文檔的可見性,因?yàn)槟槐氐却笈_(tái)合并和存儲(chǔ)(如果使用SolrCloud,則到ZooKeeper )完成,然后再轉(zhuǎn)到其他位置。完全提交意味著,如果服務(wù)器崩潰,Solr將確切地知道您的數(shù)據(jù)存儲(chǔ)在哪里;soft commit意味著數(shù)據(jù)被存儲(chǔ),但位置信息尚未被存儲(chǔ)。折中的方法是,soft commit使您能夠更快地查看,因?yàn)樗坏却笈_(tái)合并完成。

有關(guān)近實(shí)時(shí)操作的更多信息,請(qǐng)參閱近實(shí)時(shí)搜索。

自動(dòng)提交

這些設(shè)置控制掛起的更新將自動(dòng)推送到索引的頻率。自動(dòng)提交的另一種替代方法是使用commitWithin,它可以在向Solr發(fā)送更新請(qǐng)求(即推送文檔時(shí))或更新RequestHandler時(shí)定義。

  • maxDocs

    自上次提交以來發(fā)生的更新次數(shù)。

  • maxTime

    自最早未提交更新以來的毫秒數(shù)。

  • openSearcher

    是否在執(zhí)行提交時(shí)打開新的搜索器。如果是false,則提交將刷新最近的索引更改為穩(wěn)定的存儲(chǔ),但不會(huì)導(dǎo)致新的搜索器被打開,使這些更改可見。默認(rèn)是true

如果達(dá)到了 maxDocs 或 maxTime 限制,Solr 將自動(dòng)執(zhí)行提交操作。如果缺少自動(dòng)提交標(biāo)記,那么只有顯式提交才會(huì)更新索引。是否使用自動(dòng)提交取決于您的應(yīng)用程序的需求。

確定最佳自動(dòng)提交設(shè)置是性能和準(zhǔn)確性之間的權(quán)衡。導(dǎo)致頻繁更新的設(shè)置將提高搜索的準(zhǔn)確性,因?yàn)樾聝?nèi)容可以更快地進(jìn)行搜索,但由于頻繁的更新,性能可能會(huì)受到影響。不太頻繁的更新可能會(huì)提高性能,但在查詢中顯示更新需要更長的時(shí)間。

<autoCommit>
  <maxDocs>10000</maxDocs>
  <maxTime>30000</maxTime>
  <openSearcher>false</openSearcher>
</autoCommit>

您也可以像指定'soft'提交一樣指定'soft'自動(dòng)提交,不同之處在于,您不應(yīng)將 autoSoftCommit 標(biāo)記設(shè)置為 "自動(dòng)提交"。

<autoSoftCommit>
  <maxTime>60000</maxTime>
</autoSoftCommit>

commitWithin

這些commitWithin設(shè)置允許強(qiáng)制文檔提交在規(guī)定的時(shí)間段內(nèi)發(fā)生。這在近實(shí)時(shí)搜索中最常使用,因此默認(rèn)情況下是執(zhí)行soft提交。但是,這并不會(huì)將新文檔復(fù)制到主/從環(huán)境中的從屬服務(wù)器上。如果這是對(duì)實(shí)現(xiàn)的要求,可以通過添加一個(gè)參數(shù)來強(qiáng)制執(zhí)行,如下例所示:

<commitWithin>
  <softCommit>false</softCommit>
</commitWithin>

有了這個(gè)配置,當(dāng)您將commitWithin作為更新消息的一部分進(jìn)行調(diào)用時(shí),每次都會(huì)自動(dòng)執(zhí)行一個(gè)硬性提交。

事件監(jiān)聽器

UpdateHandler部分也是可以配置與更新相關(guān)的事件偵聽器的地方。這些可以在任何commit(event="postCommit")之后觸發(fā),或者僅在優(yōu)化命令(event="postOptimize")之后觸發(fā)。

用戶可以編寫自定義更新事件監(jiān)聽器類,但常見的用例是通過RunExecutableListener運(yùn)行外部可執(zhí)行文件:

  • exe

    要運(yùn)行的可執(zhí)行文件的名稱。它應(yīng)該包括文件的路徑,相對(duì)于Solr home。

  • dir

    用作工作目錄的目錄。默認(rèn)是當(dāng)前目錄(“.”)。

  • wait

    強(qiáng)制調(diào)用線程等待,直到可執(zhí)行文件返回響應(yīng)。默認(rèn)是true。

  • args

    任何傳遞給程序的參數(shù)。默認(rèn)值是none。

  • env

    任何環(huán)境變量設(shè)置。默認(rèn)值是none。

事務(wù)日志

如RealTime Get部分所述,該功能需要事務(wù)日志。它在 solrconfig. xml 的 updateHandler 部分中進(jìn)行了配置。

實(shí)時(shí)獲取當(dāng)前依賴于默認(rèn)情況下啟用的更新日志功能。它依賴于在 solrconfig. xml 中配置的更新日志,其內(nèi)容如下:

<updateLog>
  <str name="dir">${solr.ulog.dir:}</str>
</updateLog>

三個(gè)額外的專家級(jí)配置設(shè)置會(huì)影響索引性能,以及復(fù)制副本在必須進(jìn)入完全恢復(fù)之前可能落后于更新的程度,有關(guān)更多信息,請(qǐng)參見寫入端容錯(cuò)部分:

  • numRecordsToKeep

    每個(gè)日志保留的更新記錄數(shù)。默認(rèn)是100。

  • maxNumLogsToKeep

    日志的最大數(shù)量保持不變。默認(rèn)是10。

  • numVersionBuckets

    用于在檢查重新更新時(shí)用于跟蹤最大版本值的bucket的數(shù)量;增加此值可降低在高容量索引期間同步對(duì)版本存儲(chǔ)區(qū)的訪問的成本,這要求每個(gè)Solr核心具有堆空間

  • (8 bytes (long) * numVersionBuckets)。默認(rèn)是65536。

一個(gè)例子,要被包括在solrconfig.xml的<config><updateHandler>下,將使用上述高級(jí)設(shè)置:

<updateLog>
  <str name="dir">${solr.ulog.dir:}</str>
  <int name="numRecordsToKeep">500</int>
  <int name="maxNumLogsToKeep">20</int>
  <int name="numVersionBuckets">65536</int>
</updateLog>
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)