是否有可能将新字段更新为现有文档? 例如: 有一个包含多个字段的文档,例如
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)。作为一种解决方法,我考虑编写脚本或应用程序,它将收集现有字段,添加新字段并更新整个文档。但我认为这会受到影响。你还有其他想法吗?
祝你好运
答案 0 :(得分:10)
我有2个答案(或多或少都不好):
我希望这可以帮助您解决问题。如果您还有其他问题,请询问
答案 1 :(得分:7)
可以在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"
}
}
设置将添加或替换作者字段。除了设置,您还可以选择增加(增加)和添加(添加)
答案 2 :(得分:1)
从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"
}