簡體   English   中英

Solr索引按查詢更新

[英]Solr index update by query

我需要經常在solr中更新大量文檔。 例如,為user_id = 5設置“online”= true,依此類推。 但是通過http處理程序的索引速度非常慢。 Solr支持通過查詢刪除文件,有沒有辦法通過查詢更新?

不,遺憾的是,沒有像查詢更新這樣的功能。 它將非常有用,就像一個新功能,可以更新文檔而無需完全重新提交; 有一個5歲的jira問題 現在,您只需使用更新的字段重新提交文檔,如果您使用相同的uniqueKey ,它們將被覆蓋(這意味着刪除+重新插入)。

那么,您是否要為每個要更新的文檔發出http請求? 如果是,您可以更快地一次提交多個文檔,如下所示:

<add>
  <doc>
    <field name="employeeId">05991</field>
    <field name="office">Bridgewater</field>
  </doc>
  <doc>
    <field name="employeeId">05992</field>
    <field name="office">Bridgewater</field>
  </doc>
  <doc>
    <field name="employeeId">05993</field>
    <field name="office">Bridgewater</field>
  </doc>
</add>

仍然沒有查詢更新,但2012年的答案已過時。 現在在Solr 4.x中有https://wiki.apache.org/solr/Atomic_Updates,因此您可以分兩步執行您想要執行的操作,而無需訪問原始文檔。

您可以開發一個最小的Solr插件,它將在solr服務器端為您完成工作。
看看: 關於Solr郵件列表的討論

正如javanna所回答的那樣,沒有任何工具可以通過查詢進行更新,因為Solr也不允許您更新存儲在索引中的文檔中的單個字段,因此重新提交是唯一的更新方法。 我很好奇為什么你的更新太慢了。 以下是一些可以提高更新速度的方法。

  • 如果在更新每個單獨的文檔后發出提交,則等待並僅在更新索引中的一批文檔后發出更新。 來自Solr教程

    提交可能是一項昂貴的操作,因此最好對批處理中的索引進行許多更改,然后在結束時發送提交命令。 除了將所有索引段合並為單個段之外,還有一個與提交相同的優化命令,使搜索速度更快,並導致刪除任何已刪除的文檔。

  • 查看使用軟提交或自動軟提交來減少更新延遲。 有關更多詳細信息,請參閱Solr Wiki上的NearRealtimeSearch頁面。

我會使用DIH修改SQL查詢,它將接受來自URL的參數。 SQL查詢看起來像:

SELECT user_name, user_online FROM users WHERE user_id=${dataimporter.request.user_id}

然后重新索引所選用戶,您將user_id參數添加到URL,如下所示:

http://<host>:<port>/solr/dataimport?command=full-import&clean=false&user_id=5

有關使用DIH和自定義參數的文檔: Solr - DataImportHandler

暫無
暫無

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

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