我想在所有现有的Solr文档中添加一个有值的字段。我在网上搜索了很多,但找不到明确的方法。我还需要能够按该字段搜索/筛选文档。
编辑:添加了澄清-我想用这个新字段和值更新所有现有文档。
一个默认值,该值将在索引时自动添加到任何没有该字段值的文档中。
如果未指定此属性,则没有默认值。例如
<field name="timestamp" type="date" indexed="true" stored="true" default="NOW" />
请参阅Solr文档
另一种选择是部分更新文件,如下
{
"id": "123",
"name" : "Solr Updates"
}
让我们在文档中添加一个author字段-字段值将是一个具有"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"
}
}
请参阅以下文档的更新部分
使用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完成整个更新过程。首先将新字段添加到配置中,然后读入一批文档,检查新字段值是否为null(应该是因为我们刚刚添加了它(,然后用新值设置字段并保存。分批进行,这样你就不会因为一次读入太多文档而耗尽内存。