向所有现有的Solr文档中添加一个带值的字段

问题描述

我想为所有现有的Solr文档添加一个带值的字段。我在网上搜索了很多内容,但找不到明确的方法。我还需要能够通过该字段搜索/过滤文档。

编辑:添加了说明-我也想使用此新字段和值更新所有现有文档。

解决方法

默认值,当为该字段建立索引时,该默认值将自动添加到该字段中没有值的任何文档。

如果未指定此属性,则没有默认值。 例如

<field name="timestamp" type="date" indexed="true" stored="true" default="NOW" />

请参阅Solr Documentation

另一个可选选项,如下所示部分更新文档

{
 "id": "123","name" : "Solr Updates"
}

让我们在文档中添加一个作者字段,该字段值将是具有"set"属性和字段值的json对象

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

查询后,您的新文档将如下所示

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

更新文档为:

{
 "doc" : {
    "id"    : "123","name"  : "Solr Updates"
    "author": "Robert Wark"
 }
}

请参阅下面的Updating parts of DOcuments

使用Java和Solrj api可以完成以下操作。

SolrInputDocument doc = new SolrInputDocument();
Map<String,String> partialUpdate = new HashMap<String,String>();
partialUpdate.put("set","Robert Wark");
doc.addField("id","123");
doc.addField("author",partialUpdate);
,

对于将来可能遇到相同或相似问题的人: 我的Solr配置保存在Java中,而不是xml文件中,因此我决定也用Java完成整个更新过程。首先将新字段添加到配置中,然后阅读一批文档,检查新字段值是否为空-应该是因为我们刚刚添加了它,然后使用新值设置字段并保存。批量执行此操作,以免一次读取太多文档而不会耗尽内存。