将新字段更新为现有文档

Chr*_*del 10 solr

是否有可能将新字段更新为现有文档?例如:有一个包含多个字段的文档,例如

ID=99999
Field1:text
Field2:text
Run Code Online (Sandbox Code Playgroud)

此文档已在索引中,现在我想在没有旧数据的情况下向此文档插入新字段:

ID=99999
Field3:text
Run Code Online (Sandbox Code Playgroud)

现在,旧文档将被删除,并将创建一个带有ID的新文档.因此,如果我现在搜索ID 99999,结果将是:

ID=99999
Field3:text
Run Code Online (Sandbox Code Playgroud)

我在Solr Wiki上读过这篇文章

如何更新现有文档的特定字段?

我想更新文档中的特定字段,这可能吗?我只需要为一个特定文档索引一个字段.我是否必须为此索引所有文档?

不,只是一个文件.假设您有一个CMS并且您编辑了一个文档.您只需要使用整个文档的add solr语句(仅限一个字段)重新索引此文档.

在Lucene中更新文档时,操作实际上是删除后跟添加.您将需要>添加完整的文档,因为Lucene中没有这样的"仅更新字段"语义.

那有什么解决方案吗?这个功能是否会在另一个版本中实现(我目前使用的是3.6.0).作为一种解决方法,我考虑编写脚本或应用程序,它将收集现有字段,添加新字段并更新整个文档.但我认为这会受到影响.你还有其他建议吗?

最好的祝福

Fux*_*uxi 10

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

  1. 要更新Solr中的文档,您必须重新索引整个文档(要更新文档ID中的Field3:99999,您必须使用所有字段的值重新索引该文档)
  2. 在Solr 4中,他们实现了这样的功能,但它们有一个条件:所有字段都必须存储,而不仅仅是索引.发生了什么,他们正在使用存储的值并在后台重新索引文档.如果你有兴趣,有一篇很好的文章:http://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/这个解决方案有明显的缺陷,那就是大小存储所有字段时的索引.

我希望这能帮助你解决问题.如果您还有其他问题,请询问


cod*_*man 7

可以在Solr 4中执行此操作.例如,请考虑以下文档

{
 "id": "book123",
 "name" : "Solr Rocks"
}
Run Code Online (Sandbox Code Playgroud)

为了向文档添加作者字段,字段值将是具有"set"属性和字段值的json对象

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

你的新文件

$ curl http://localhost:8983/solr/get?id=book123
Run Code Online (Sandbox Code Playgroud)

将会

{
 "doc" : {
    "id"    : "book123",
    "name"  : "Solr Rocks"
    "author": "The Community"
 }
}
Run Code Online (Sandbox Code Playgroud)

Set将添加或替换author字段.除了设置,您还可以选择增加(增加)和添加(添加)