elasticsearch 删除elasticsearch上的文档字段,elasticsearch,elasticsearch" /> elasticsearch 删除elasticsearch上的文档字段,elasticsearch,elasticsearch" />

elasticsearch 删除elasticsearch上的文档字段

elasticsearch 删除elasticsearch上的文档字段,elasticsearch,elasticsearch,我想更新一份文件。所以,每次我想更新一个对象时,我都会序列化它并将其发送给ES。想象一个POJO对象具有 obj.status = 20; obj.description = "raw description"; 当我更新此对象时,它在ES上被序列化和索引为: { status: 20, description: "raw description" } 因此,我现在需要将此对象更新为: obj.status = null; 然后,我将其序列化: { descript

我想更新一份文件。所以,每次我想更新一个对象时,我都会序列化它并将其发送给ES。想象一个POJO对象具有

obj.status = 20;
obj.description = "raw description";
当我更新此对象时,它在ES上被序列化和索引为:

{
    status: 20,
    description: "raw description"
}
因此,我现在需要将此对象更新为:

obj.status = null;
然后,我将其序列化:

{
    description: "raw description"
}
问题是,从现在起,我不希望
状态
被索引。问题是ES将此对象与索引的前一个对象合并。因此,本文件的索引为:

{
    status: 20,
    description: "raw description"
}
所以,我需要从索引中“删除”这个字段

任何想法。 谢谢。

您有两种解决方案

  • 将更新API与脚本而不是文档一起使用
  • 使用索引API,通过对具有相同Id的文档重新编制索引,可以删除字段。索引API的行为类似于upsert
  • 代码示例:

    # 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"
    }
    

    更新API触发先读后写,而索引API只触发写入。

    您使用的是索引API还是更新API?我使用的是更新API。