gpt4 book ai didi

elasticsearch - ElasticSearch按最大日期查询

转载 作者:行者123 更新时间:2023-12-02 23:07:24 25 4
gpt4 key购买 nike

我有一个仅追加的索引。每次更改都会与date属性一起保存为新文档。为了获取当前的 Activity 数据,我需要按其ID对所有实体进行分组,并获取具有最新日期的实体。应该可以为该日期添加一个过滤器。我一直在玩聚合,但是我一直使用滚动API。
数据示例(注意:id为Guid,日期为unix时间戳,使用此处的其他值使其更清晰)

   {"id": "<entityId_date>", "entityId", 1, "date": "2020-05-10", "value": { <JSON document> } }, 
{"id": "<entityId_date>", "entityId", 1, "date": "2020-06-10", "value": { <JSON document> } },
{"id": "<entityId_date>", "entityId", 2, "date": "2020-04-10", "value": { <JSON document> } },
{"id": "<entityId_date>", "entityId", 2, "date": "2020-08-10", "value": { <JSON document> } },
{"id": "<entityId_date>", "entityId", 3, "date": "2020-07-10", "value": { <JSON document> } }

所需结果:
   {"id": "<entityId_date>", "entityId", 1, "date": "2020-06-10", "value": { <JSON document> } }, 
{"id": "<entityId_date>", "entityId", 2, "date": "2020-08-10", "value": { <JSON document> } },
{"id": "<entityId_date>", "entityId", 3, "date": "2020-07-10", "value": { <JSON document> } }
尝试了以下查询:
{
"size": 0,
"aggs": {
"id_aggregate": {
"terms": {
"field": "entityId"
},
"aggs": {
"date_aggregate": {
"top_hits": {
"sort": [{
"date.ticks": {
"order": "desc"
}
}],
"size": 1
}
}
}
}
}
}

我得到的结果是正确的,但我只得到了第一个X结果。我可以设置 id_aggregate的大小,但是可能有成千上万的文档。
通过普通的搜索查询,我将能够使用Scroll API,但是使用聚合是不可能的。
我已经研究过使用分区,但这也无济于事,因为有时文档很少,有时会有负载。 (这是一种基本查询,我们执行的所有其他查询将指定其他过滤器)。
我如何建立一个查询,该查询按文档的最大日期获取文档并且可以滚动?

最佳答案

您可以使用复合aggs进行分页,并保留top_hits agg仅检索最新的文档:

{
"size": 0,
"aggs": {
"comp_parent": {
"composite": {
"sources": [
{
"by_id": {
"terms": {
"field": "entityId"
}
}
}
],
"size": 10, <-- bucket size
"after": {
"by_id": "<entityId_date>_xyz" <-- pagination 'cursor'
}
},
"aggs": {
"hits": {
"top_hits": {
"size": 1,
"sort": [
{
"date.ticks": {
"order": "desc"
}
}
]
}
}
}
}
}
}

关于elasticsearch - ElasticSearch按最大日期查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64261264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com