将具有值的字段添加到所有现有Solr文档中



我想在所有现有的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(应该是因为我们刚刚添加了它(,然后用新值设置字段并保存。分批进行,这样你就不会因为一次读入太多文档而耗尽内存。

最新更新