如何编写Elasticsearch DSL查询获取每个id对应的最新用户资料
Elasticsearch DSL 实现方案
场景1:查询单个指定ID的最新用户资料
这种场景性能最优的实现方式是直接过滤目标ID,按更新时间倒序后取第一条:
GET 你的索引名/_search { "query": { "bool": { "filter": [ { "term": { "id.keyword": "123" } } ] } }, "sort": [ { "lastProfileUpdateTime": { "order": "desc" } } ], "size": 1 }
注:如果你的id字段映射类型本身就是keyword,可直接写
"id": "123",不需要加.keyword后缀。
查询返回的hits里的第一条数据就是所需的最新用户资料。
场景2:批量查询所有ID各自对应的最新用户资料
如果需要一次性拿到所有id的最新记录,可以用聚合实现:
GET 你的索引名/_search { "size": 0, "aggs": { "group_by_id": { "terms": { "field": "id.keyword", "size": 1000 }, "aggs": { "latest_profile": { "top_hits": { "size": 1, "sort": [ { "lastProfileUpdateTime": { "order": "desc" } } ] } } } } } }
返回结果的aggregations节点下,每个分组的latest_profile下的hits就是对应id的最新资料。
内容的提问来源于stack exchange,提问作者Zack
相关产品推荐
相关产品推荐

