gpt4 book ai didi

elasticsearch - 按选定字段进行 Elasticsearch 排序聚合

转载 作者:行者123 更新时间:2023-11-29 02:54:39 27 4
gpt4 key购买 nike

如何按源数据中的字段对聚合输出进行排序,但不是聚合输出的一部分?

在我的源数据中,我有一个日期字段,我希望聚合的输出按日期排序。

这可能吗?我看过在聚合中使用“order”,但我不认为它可以看到那个日期字段来使用它进行排序?

我还尝试添加一个包含日期字段的子聚合,但同样,我无法让它在此字段上排序。

我正在为我的 ETL 中的每个文档计算一个散列,然后再进入 elastic。我的数据集包含很多重复项,因此我尝试使用散列字段上的聚合来过滤掉重复项并且效果很好。我需要聚合的输出来保留日期排序顺序,以便我可以按角度处理输出。

文档是这样的:

{_id: 123,
_source: {
"hash": "01010101010101"
"user": "1"
"dateTime" : "2001/2/20 09:12:21"
"action": "Login"
}

{_id: 124,
_source: {
"hash": "01010101010101"
"user": "1"
"dateTime" : "2001/2/20 09:12:21"
"action": "Login"
}


{_id: 132,
_source: {
"hash": "0202020202020"
"user": "1"
"dateTime" : "2001/2/20 09:20:43"
"action": "Logout"
}

{_id: 200,
_source: {
"hash": "0303030303030303"
"user": "2"
"dateTime" : "2001/2/22 09:32:14"
"action": "Login"
}

所以我想对哈希值使用聚合来从我的集合中删除重复项,然后按日期顺序呈现响应。

我的查询:

{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"term": {
"action": "Login"
}
}
]
},
"size": 0,
"aggs": {
"md5": {
"terms": {
"field": "hash",
"size": 0
}
},
"size": 0,
"aggs": {
"byDate": {
"terms": {
"field": "dateTime",
"size": 0
}
}
}
}
}
}
}
}

目前,输出是按散列排序的,我需要它按每个散列桶内的日期字段排序。这可能吗?

最佳答案

如果对“hash”的聚合只是为了删除重复项,那么您可以先简单地对“dateTime”进行聚合,然后对“hash”进行 terms 聚合。例如:

GET my_index/test/_search
{
"query" : {
"filtered" : {
"filter" : {
"bool": {
"must" : [
{ "term": {"action":"Login"} }
]
}
}
}
},
"size": 0,
"aggs": {
"byDate" : {
"terms": {
"field" : "dateTime",
"order": { "_term": "asc" } <---- EDIT: must specify order here
},
"aggs": {
"byHash": {
"terms": {
"field": "hash"
}
}
}
}
}
}

这样,您的结果将首先按“日期时间”排序。

关于elasticsearch - 按选定字段进行 Elasticsearch 排序聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35557911/

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