首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solr能做原子更新吗?

Solr能做原子更新吗?
EN

Stack Overflow用户
提问于 2014-01-08 20:40:43
回答 1查看 1.4K关注 0票数 8

Solr 4提供了对索引中现有文档进行原子(部分)更新的能力。也就是说,可以在文档ID上匹配,只替换一个字段的内容,或者向多值字段添加更多的条目:Updates

原子更新可以从DataImportHandler (DIH)完成吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-09 02:54:33

我通过反复试验发现,ScriptTransformer的答案是“是的”。

Solr文档展示了如何向具有"set“、" add”或"inc“的字段节点添加更新属性。如果我用必需的update属性创建了一个测试XML文件,那么它在传递给常规更新处理程序时工作得很好。但是,当传递给DIH时--即使没有任何转换--更新属性也会被完全忽略。

下面是我用来重新引入update属性并使原子更新工作的脚本转换器的简化版本。注意Java HashMap的使用。

代码语言:javascript
复制
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:

代码语言:javascript
复制
{
    "id": [
        123
    ],
    "author": [
        {
            "add": "Smith, J"
        }
    ]
}

多值字段也没有问题:将ArrayList传递给HashMap而不是字符串。

代码语言:javascript
复制
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);
}
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21006045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档