在Elasticsearch中过滤折叠的结果

时间:2019-06-21 20:45:29

标签: elasticsearch

我有一个Elasticsearch索引,其中包含代表给定时间点的实体的文档。当实体更改状态时,将创建带有时间戳的新文档。当我需要获取所有实体的当前状态时,可以执行以下操作:

GET https://127.0.0.1:9200/myindex/_search
{
    "collapse": {
        "field": "entity_id"
    },
    "sort" : [{
        "timestamp": {
            "order": "desc"
        }
    }]
}

但是,我想进一步过滤崩溃的结果。删除实体后,我将在嵌套元数据字段中创建一个包含is_deleted标志以及时间戳的新文档。我想扩展上述查询以完全过滤掉那些已删除的实体。在entity_metadata.is_deleted: true上使用术语过滤器显然是行不通的,因为这样一来,我的结果将只包含带有该object_id的最后一个文档,然后将其标记为已删除。

折叠完成后,我如何过滤结果?

1 个答案:

答案 0 :(得分:1)

我的建议是,除了向所有is_deleted文档添加entity_id标志之外,您还可以向该实体的所有文档添加带有删除日期的date_deleted字段,然后在查看文档时,给定文档的日期和deleted_date,您会知道该文档在该日期是有效的还是已删除。

此外,它可以让您考虑:

  1. 所有没有deleted_date字段(即未删除)的文档,并且
  2. 在给定日期之前/之后具有deleted_date的所有文档。