删除elasticsearch

时间:2015-11-10 08:29:12

标签: elasticsearch

我想要更新文件。所以,每次我想要更新一个对象时,我都会对它进行序列化,然后将它发送给ES。想象一下POJO对象。

obj.status = 20;
obj.description = "raw description";

当我更新这个对象时,它在ES上被序列化并编入索引:

{
    status: 20,
    description: "raw description"
}

所以,我现在需要将此对象更新为:

obj.status = null;

然后,我将其序列化:

{
    description: "raw description"
}

问题是,从现在开始,我不希望status被编入索引。问题是ES将此对象与索引的前一个对象合并。所以,索引这个文件是:

{
    status: 20,
    description: "raw description"
}

所以,我需要从索引中“删除”这个字段。

任何想法。 感谢。

1 个答案:

答案 0 :(得分:0)

你有2个解决方案。

  1. 将Update API与脚本一起使用,而不是 doc
  2. 使用Index API,通过重新索引具有相同ID的文档,您可以删除字段。 Index API的行为就像一个upsert。
  3. 代码示例:

    # Update API with Script
    POST your_index/your_type/1/_update
    {
        "script" : "ctx._source.remove(\"status\")"
    }
    # Index API to reindex
    PUT your_index/your_type/1
    {
        description: "raw description"
    }
    

    Update API触发Read before Write,而Index API仅触发Write。