Solr實時獲取功能

2018-12-05 11:50 更新

為了讓Solr索引更新可見(可搜索),某些類型的提交必須重新打開搜索程序到索引的新時間點視圖。

Solr實時獲取功能使檢索(通過 unique-key)任何文檔的最新版本,而無需重新打開一個搜索的相關成本。在使用 Solr 作為 NoSQL 數據存儲而不僅僅是搜索索引時,這是非常有用的。

實時獲取依賴于 "更新日志" 功能,該功能默認啟用,并且可以在 solrconfig.xml 中進行配置,如下所示:

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

實時獲取請求可以使用在 Solr 隱式存在的 /get 處理程序來執(zhí)行-請參見隱式 RequestHandlers,它等效于以下配置:

<requestHandler name="/get" class="solr.RealTimeGetHandler">
  <lst name="defaults">
    <str name="omitHeader">true</str>
  </lst>
</requestHandler>

例如, 如果您使用 bin/solr-techproducts 示例命令啟動了Solr,那么您就可以對一個新文檔(不需要提交它)進行索引 (以提交它),如下所示:

curl 'http://localhost:8983/solr/techproducts/update/json?commitWithin=10000000' \
  -H 'Content-type:application/json' -d '[{"id":"mydoc","name":"realtime-get test!"}]'

如果您進行正常搜索,則不應該找到該文檔:

http://localhost:8983/solr/techproducts/query?q=id:mydoc
...
"response":
{"numFound":0,"start":0,"docs":[]}

但是,如果使用公開的實時獲取處理程序/get,則仍然可以檢索該文檔:

http://localhost:8983/solr/techproducts/get?id=mydoc
...
{"doc":{"id":"mydoc","name":"realtime-get test!", "_version_":1487137811571146752}}

您也可以通過 ids 參數和以逗號分隔的 id 列表或使用多個 id 參數同時指定多個文檔。如果您指定了多個 ID 或使用 ids 參數,則響應將模擬正常的查詢響應,以便現有客戶端更容易解析。

例如:

http://localhost:8983/solr/techproducts/get?ids=mydoc,IW-02
http://localhost:8983/solr/techproducts/get?id=mydoc&id=IW-02
...
{"response":
  {"numFound":2,"start":0,"docs":
    [ { "id":"mydoc",
        "name":"realtime-get test!",
        "_version_":1487137811571146752},
      {
        "id":"IW-02",
        "name":"iPod & iPod Mini USB 2.0 Cable",
        ...
    ]
 }
}

實時獲取請求也可以與過濾器查詢結合使用,用 fq 參數指定,就像搜索請求一樣:

http://localhost:8983/solr/techproducts/get?id=mydoc&id=IW-02&fq=name:realtime-get
...
{"response":
  {"numFound":1,"start":0,"docs":
    [ { "id":"mydoc",
        "name":"realtime-get test!",
        "_version_":1487137811571146752}
    ]
 }
}

注意:如果您使用的是 SolrCloud,則不要禁用實時獲取處理程序/get,否則任何首項選擇都將導致有關碎片的所有副本的完全同步。

同樣,復制副本恢復也總是從首項那里獲取完整的索引,因為在沒有這個處理程序的情況下,部分同步是不可能的。

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號