更新一个新的领域,以现有的文档(Update a new field to existing doc

2019-06-26 17:46发布

是有可能更新一个新的领域,以现有的文件? 例如:有几个领域,如一个文件

ID=99999
Field1:text
Field2:text

这份文件是已经编入索引,现在我要插入一个新的领域,以这个文件没有旧的数据:

ID=99999
Field3:text

现在,旧的文件将被删除,ID为一个新文件将被创建。 所以,如果我现在要查找的ID 99999的结果将是:

ID=99999
Field3:text

我在Solr的维基阅读本

如何更新现有文档的某一特定领域?

我想在文档中更新特定领域,这可能吗? 我只需要一个索引字段>特定的文档。 我一定要指数这一切的文件?

不,只是一个文件。 比方说,你有一个CMS和编辑一个文档。 您将只需要通过使用附加Solr的语句将整个文档重新索引该文件(不只是一个字段)。

在Lucene来更新文档的操作实在是删除后添加。 您需要>添加完整的文档,因为没有这样的“仅更新域”在Lucene的语义。

那么,有没有这方面的任何解决方案? 请问这个功能在进一步的版本中实现(我目前使用的3.6.0)。 作为一种变通方法,我想过写一个脚本或应用程序,它会收集现有的字段,添加新的领域,并更新整个文件。 但我认为这将遭受性能。 你还有其他建议吗?

最好的祝福

Answer 1:

我有2个答案给你(都或多或少坏的):

  1. 为了具有更新申请文件Solr中,你必须重新索引整个文档(文档到ID内更新字段3:99999,你必须重新索引值与该文档的所有字段)
  2. 在Solr的4他们实现这样的功能,但它们有一个条件:所有字段必须存储,不仅仅是索引。 正在发生的事情是他们所使用存储的值,并在后台重新索引文件。 如果你有兴趣,有关于它的好文章: http://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/该解决方案具有明显的缺陷,那就是大小指数当你存储的所有领域。

我希望这会帮助你解决问题。 如果您有更多的疑问,请咨询



Answer 2:

这是可以做到这一点的Solr 4.如考虑下面的文件

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

为了一个作者字段添加到文档中的字段值将与“设置”属性的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"
 }
}

设置将添加或更换的作者字段。 随着集,因此还必须增加(INC)的选项,并添加(添加)



Answer 3:

从Solr的4起,可以更新Solr的一个字段....无需重新索引整个指标....各种各样的改性剂支持像....

设置 - 设置或更换特定值,或者如果null被指定为新的附加价值删除值 - 增加了额外的值到一个列表移除 - 从列表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"
}


文章来源: Update a new field to existing document
标签: solr