我有一个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的最后一个文档,然后将其标记为已删除。
答案 0 :(得分:1)
我的建议是,除了向所有is_deleted
文档添加entity_id
标志之外,您还可以向该实体的所有文档添加带有删除日期的date_deleted
字段,然后在查看文档时,给定文档的日期和deleted_date
,您会知道该文档在该日期是有效的还是已删除。
此外,它可以让您考虑:
deleted_date
字段(即未删除)的文档,并且deleted_date
的所有文档。