11

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

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)。作为一种解决方法,我考虑编写一个脚本或应用程序,它将收集现有字段、添加新字段并更新整个文档。但我认为这会影响性能。你还有其他建议吗?

此致

4

3 回答 3

10

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

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

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

于 2012-08-03T09:13:16.767 回答
9

It is possible to do this in Solr 4. E.g. Consider the following document

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

In order to add an author field to the document the field value would be a json object with "set" attribute and the field value

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

Your new document

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

will be

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

Set will add or replace the author field. Along with set you also have the option to increment(inc) and adding(add)

于 2013-07-10T20:16:49.883 回答
3

从 Solr 4 开始,您可以更新 solr 中的字段 ....无需重新索引整个索引 .... 支持各种修饰符,例如 ....

set – 设置或替换特定值,如果将 null 指定为新值,则删除该值 add – 将附加值添加到列表中 remove – 从列表中删除值(或值列表) removeregex – 从列表中删除与给定 Java 正则表达式匹配的列表 inc – 将数值递增特定数量(使用负值递减)

例子 :

文档

{
 "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"
}
于 2016-01-11T08:59:29.393 回答