Solr 4提供了对索引中现有文档进行原子(部分)更新的能力。也就是说,可以在文档ID上匹配,只替换一个字段的内容,或者向多值字段添加更多的条目:Updates
原子更新可以从DataImportHandler (DIH)完成吗?
发布于 2014-01-09 02:54:33
我通过反复试验发现,ScriptTransformer的答案是“是的”。
Solr文档展示了如何向具有"set“、" add”或"inc“的字段节点添加更新属性。如果我用必需的update属性创建了一个测试XML文件,那么它在传递给常规更新处理程序时工作得很好。但是,当传递给DIH时--即使没有任何转换--更新属性也会被完全忽略。
下面是我用来重新引入update属性并使原子更新工作的脚本转换器的简化版本。注意Java HashMap的使用。
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);
}https://stackoverflow.com/questions/21006045
复制相似问题