问题描述
我想为所有现有的Solr文档添加一个带值的字段。我在网上搜索了很多内容,但找不到明确的方法。我还需要能够通过该字段搜索/过滤文档。
编辑:添加了说明-我也想使用此新字段和值更新所有现有文档。
解决方法
默认值,当为该字段建立索引时,该默认值将自动添加到该字段中没有值的任何文档。
如果未指定此属性,则没有默认值。 例如
<field name="timestamp" type="date" indexed="true" stored="true" default="NOW" />
另一个可选选项,如下所示部分更新文档
{
"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完成整个更新过程。首先将新字段添加到配置中,然后阅读一批文档,检查新字段值是否为空-应该是因为我们刚刚添加了它,然后使用新值设置字段并保存。批量执行此操作,以免一次读取太多文档而不会耗尽内存。