簡體   English   中英

將新字段更新為現有文檔

[英]Update a new field to existing document

是否有可能將新字段更新為現有文檔? 例如:有一個包含多個字段的文檔,例如

ID=99999
Field1:text
Field2:text

此文檔已在索引中,現在我想在沒有舊數據的情況下向此文檔插入新字段:

ID=99999
Field3:text

現在,舊文檔將被刪除,並將創建一個帶有ID的新文檔。 因此,如果我現在搜索ID 99999,結果將是:

ID=99999
Field3:text

我在Solr Wiki上讀過這篇文章

如何更新現有文檔的特定字段?

我想更新文檔中的特定字段,這可能嗎? 我只需要為一個特定文檔索引一個字段。 我是否必須為此索引所有文檔?

不,只是一個文件。 假設您有一個CMS並且您編輯了一個文檔。 您只需要使用整個文檔的add solr語句(僅限一個字段)重新索引此文檔。

在Lucene中更新文檔時,操作實際上是刪除后跟添加。 您將需要>添加完整的文檔,因為Lucene中沒有這樣的“僅更新字段”語義。

那有什么解決方案嗎? 這個功能是否會在另一個版本中實現(我目前使用的是3.6.0)。 作為一種解決方法,我考慮編寫腳本或應用程序,它將收集現有字段,添加新字段並更新整個文檔。 但我認為這會受到影響。 你還有其他建議嗎?

最好的祝福

我有2個答案(或多或少都不好):

  1. 要更新Solr中的文檔,您必須重新索引整個文檔(要更新文檔ID中的Field3:99999,您必須使用所有字段的值重新索引該文檔)
  2. 在Solr 4中,他們實現了這樣的功能,但它們有一個條件:所有字段都必須存儲,而不僅僅是索引。 發生了什么,他們正在使用存儲的值並在后台重新索引文檔。 如果你有興趣,有一篇很好的文章: http//solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/這個解決方案有明顯的缺陷,那就是大小存儲所有字段時的索引。

我希望這能幫助你解決問題。 如果您還有其他問題,請詢問

可以在Solr 4中執行此操作。例如,請考慮以下文檔

{
 "id": "book123",
 "name" : "Solr Rocks"
}

為了向文檔添加作者字段,字段值將是具有“set”屬性和字段值的json對象

$ curl http://localhost:8983/solr/update -H 'Content-type:application/json' -d '
[
 {"id"       : "book123",
  "author"   : {"set":"The Community"}
 }
]'

你的新文件

$ curl http://localhost:8983/solr/get?id=book123

將會

{
 "doc" : {
    "id"    : "book123",
    "name"  : "Solr Rocks"
    "author": "The Community"
 }
}

Set將添加或替換author字段。 除了設置,您還可以選擇增加(增加)和添加(添加)

從Solr 4開始,您可以更新solr中的字段....無需重新索引整個索引....支持各種修飾符,如....

set - 設置或替換特定值,或者如果指定null作為新值add,則刪除值 - 向列表中添加附加值remove - 從列表中刪除值(或值列表)removeregex - 從中​​刪除與給定Java正則表達式匹配的列表 - 按特定量遞增數值(使用負值遞減)

例如:

文獻

{
 "id": "1",
 "name" : "Solr"
 "views" : "2"
}

現在更新

$ curl http://localhost:8983/solr/demo/update -d '
[
 {"id"         : "1",
  "author"   : {"set":"Neal Stephenson"},
  "views"   : {"inc":3},
  }
]' 

將導致

{
 "id": "1",
 "name" : "Solr"
 "views" : "5"
 "author" : "Neal Stephenson"
}

暫無
暫無

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

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