簡體   English   中英

如何更新solr索引?

[英]How to update solr index?

當用戶創建文檔時,我將日期添加到solr索引中。 每次數據更改(例如編輯或刪除)時,是否都必須重新索引整個數據?

在這種情況下,重新索引是什么意思? 當我做

$this->indexData(array(
        'id' => $pid,
        'title' => $data['titel']
));

對於每個文檔,並執行$solr->addDocuments ,它是否會覆蓋已經存在的數據?

我試圖在添加/刪除/編輯上為整個索引重新編制索引,但是刪除某些字段后,它的信息似乎仍在索引中。

有任何想法嗎?

當您將文檔編入索引時,它將使用相同的<uniqueKey/> (通常是id)覆蓋任何現有文檔。 是的,它會覆蓋現有數據。

當您要更改文檔的單個字段時,您將不得不重新索引整個文檔,因為solr不支持僅更新字段。 因此,刪除字段時,您將不得不為沒有該字段的文檔重新編制索引。 這將覆蓋現有數據。 不要忘記在最后發送一次commit

使用Solr 4,您可以更新文檔的單個字段。 參見Atomic_Updates

++以上。

另外,如果您的更改量很大,則可能存在問題:

當您在solr中“更新”文檔時(如Morja所說),這不是“就地”更新。 發生的情況是,Solr為其文檔維護一個內部查找表,並且當您更新文檔時,它必須保留一個重定向列表,以便當在反向索引中擊中指向“更新的”文檔的指針時,它便知道要轉到新文檔。該文檔的版本。

如果您有足夠的內存,這很好,但是最終,Solr在用完該內存並跟蹤所有更改時將需要重建查找。 (以我的經驗)這會導致意外的速度降低和不必要的優化。

對您來說可能不是問題,但對我而言。 (每小時更新數千次)

問題可能是您沒有在更新后提交文檔(這是刪除和插入操作),但是過於頻繁的提交可能會觸發優化,因此請小心。

您無需為整個數據重新編制索引,但是必須使用更新的文檔來重建整個文檔。

暫無
暫無

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

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