Solr DIH能做原子更新吗`
Solr4能够对索引中的现有文档进行原子(部分)更新。即,可以匹配文档ID并仅替换一个字段的内容,或向多值字段添加更多条目: 原子更新可以从DataImportHandler(DIH)完成吗?我通过反复试验发现,ScriptTransformer的答案是“是” Solr文档展示了如何使用“set”、“add”或“inc”向字段节点添加更新属性。如果我创建了一个带有必需的update属性的测试XML文件,那么它在传递给常规更新处理程序时可以正常工作。但是,当传递给DIH时,即使没有任何转换,更新属性也会被完全忽略 这里是脚本转换器的简化版本,我使用它重新引入update属性并使原子更新工作。注意Java HashMap的使用Solr DIH能做原子更新吗`,solr,dih,Solr,Dih,Solr4能够对索引中的现有文档进行原子(部分)更新。即,可以匹配文档ID并仅替换一个字段的内容,或向多值字段添加更多条目: 原子更新可以从DataImportHandler(DIH)完成吗?我通过反复试验发现,ScriptTransformer的答案是“是” Solr文档展示了如何使用“set”、“add”或“inc”向字段节点添加更新属性。如果我创建了一个带有必需的update属性的测试XML文件,那么它在传递给常规更新处理程序时可以正常工作。但是,当传递给DIH时,即使没有任何转换,更新属
var atomicTransformer = function (row) {
var authorMap = new java.util.HashMap();
var author = String(row.get('author'));
authorMap.put('add', author);
row.put('author', authorMap);
};
这将在DIH调试模式下生成以下JSON:
{
"id": [
123
],
"author": [
{
"add": "Smith, J"
}
]
}
多值字段也没有问题:将ArrayList而不是字符串传递给HashMap
var atomicTransformer = function (row) {
var fruits = new java.util.ArrayList();
fruits.add("banana");
fruits.add("apple");
fruits.add("pear");
var fruitMap = new java.util.HashMap();
fruitMap.put('add', fruits);
row.put('fruit', fruitMap);
}