是有可能更新一个新的领域,以现有的文件? 例如:有几个领域,如一个文件
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)。 作为一种变通方法,我想过写一个脚本或应用程序,它会收集现有的字段,添加新的领域,并更新整个文件。 但我认为这将遭受性能。 你还有其他建议吗?
最好的祝福
我有2个答案给你(都或多或少坏的):
- 为了具有更新申请文件Solr中,你必须重新索引整个文档(文档到ID内更新字段3:99999,你必须重新索引值与该文档的所有字段)
- 在Solr的4他们实现这样的功能,但它们有一个条件:所有字段必须存储,不仅仅是索引。 正在发生的事情是他们所使用存储的值,并在后台重新索引文件。 如果你有兴趣,有关于它的好文章: http://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/该解决方案具有明显的缺陷,那就是大小指数当你存储的所有领域。
我希望这会帮助你解决问题。 如果您有更多的疑问,请咨询
这是可以做到这一点的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)的选项,并添加(添加)
从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"
}