Elasticsearch索引存在多版本文档 如何查询仅返回最新文档
Elasticsearch 仅返回最新文档的查询方案
固定返回_id为02的指定文档
如果你确定需要返回的最新文档_id固定为02,直接使用ids精确匹配查询即可,语句如下:
POST /<你的索引名称>/_search { "query": { "ids": { "values": ["02"] } } }
自动识别同业务下的最新文档
如果后续还会持续生成新版本的文档,需要每次查询自动返回最新版本,推荐给文档新增create_time时间戳或version版本号字段,存储文档的更新时间或版本序号,再通过以下两种方式查询:
方式1:直接返回全索引最新的1条文档
如果仅需要返回全索引最新的1条文档,且_id为数字递增生成(数值越大越新),可以直接按_id倒序取第一条:
POST /<你的索引名称>/_search { "sort": [ { "_id": { "order": "desc" } } ], "size": 1 }
- 该方案仅适用于_id按数字递增生成的场景,若_id为随机生成请使用下方的聚合方案。
方式2:按业务分组返回每组最新文档
如果索引内存在多组不同业务的文档,每组都需要返回最新版本,先给每个文档添加业务唯一标识字段(如business_id),使用top_hits聚合实现:
POST /<你的索引名称>/_search { "size": 0, "aggs": { "group_by_business": { "terms": { "field": "business_id.keyword", "size": 100 }, "aggs": { "latest_doc": { "top_hits": { "sort": [ { "version": { "order": "desc" } } ], "size": 1 } } } } } }
- 你也可以把排序字段替换为
create_time,按时间倒序取最新的文档。
内容的提问来源于stack exchange,提问作者user16985323
相关产品推荐
相关产品推荐

