如何按源数据中的字段对聚合的输出进行排序,而不是聚合输出的一部分?
在我的源数据中,我有一个日期字段,我希望按日期对聚合的输出进行排序。
那可能吗?我已经看过在汇总中使用“订单”,但是我认为它看不到该日期字段可用于排序吗?
我还尝试添加包括日期字段的子聚合,但是同样,我无法在该字段上对它进行排序。
我正在为ETL计算ETL中每个文档的哈希值。我的数据集包含很多重复项,因此我尝试使用哈希字段上的聚合来过滤出重复项,并且效果很好。我需要聚合的输出来保留日期排序顺序,以便可以按角度使用输出。
这些文件是这样的:
{_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"
}
Run Code Online (Sandbox Code Playgroud)
因此,我想对哈希值使用聚合,以从集合中删除重复项,然后按日期顺序呈现响应。
我的查询:
{
"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
}
}
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
目前,输出按哈希排序,而我需要按每个哈希存储区中的日期字段排序。那可能吗?
如果“哈希”上的聚合仅用于除去重复项,那么您可以先简单地在“ dateTime”上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"
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这样,您的结果将首先按“ dateTime”排序。
| 归档时间: |
|
| 查看次数: |
3865 次 |
| 最近记录: |