【问题标题】:Sort Aggregation in elastic seach?elasticsearch中的排序聚合?
【发布时间】:2021-02-11 17:41:13
【问题描述】:

我有一个用例,我需要从 Elasticsearch 获取所有唯一的用户 ID,并且它应该按时间戳排序。

我目前使用的是带有子聚合的复合术语聚合,它将返回最新的时间戳。

(我无法在客户端对其进行排序,因为它会减慢脚本速度)

弹性搜索中的样本数据

{
  "_index": "logstash-2020.10.29",
  "_type": "doc",
  "_id": "L0Urc3UBttS_uoEtubDk",
  "_version": 1,
  "_score": null,
  "_source": {
    "@version": "1",
    "@timestamp": "2020-10-29T06:56:00.000Z",
    "timestamp_string": "1603954560",
    "search_query": "example 3",
    "user_uuid": "asdfrghcwehf",
    "browsing_url": "https://www.google.com/search?q=example+3",
  },
  "fields": {
    "@timestamp": [
      "2020-10-29T06:56:00.000Z"
    ]
  },
  "sort": [
    1603954560000
  ]
}

预期输出:

[
        {
          "key" : "bjvexyducsls",
          "doc_count" : 846,
          "1" : {
            "value" : 1.603948557E12,
            "value_as_string" : "2020-10-29T05:15:57.000Z"
          }
        },
        {
          "key" : "lhmsbq2osski",
          "doc_count" : 420,
          "1" : {
            "value" : 1.6039476E12,
            "value_as_string" : "2020-10-29T05:00:00.000Z"
          }
        },
        {
          "key" : "m2wiaufcbvvi",
          "doc_count" : 1,
          "1" : {
            "value" : 1.603893635E12,
            "value_as_string" : "2020-10-28T14:00:35.000Z"
          }
        },
        {
          "key" : "rrm3vd5ovqwg",
          "doc_count" : 1,
          "1" : {
            "value" : 1.60389362E12,
            "value_as_string" : "2020-10-28T14:00:20.000Z"
          }
        },
        {
          "key" : "x42lk4t3frfc",
          "doc_count" : 72,
          "1" : {
            "value" : 1.60389318E12,
            "value_as_string" : "2020-10-28T13:53:00.000Z"
          }
        }
      ]

【问题讨论】:

  • 能否提供一些示例索引数据、映射和预期的搜索查询结果?您的示例索引数据中有date 字段吗?
  • 添加了示例数据问题。需要排序聚合列表之类的东西。

标签: elasticsearch elastic-stack dsl querydsl elk


【解决方案1】:

添加一个包含索引数据、映射、搜索查询和搜索结果的工作示例

索引映射:

{
  "mappings":{
    "properties":{
      "user":{
        "type":"keyword"
      },
      "date":{
        "type":"date"
      }
    }
  }
}

索引数据:

{
  "date": "2015-01-01",
  "user": "user1"
}
{
  "date": "2014-01-01",
  "user": "user2"
}
{
  "date": "2015-01-11",
  "user": "user3"
}

搜索查询:

{
  "size": 0,
  "aggs": {
    "user_id": {
      "terms": {
        "field": "user",
        "order": {
          "sort_user": "asc"
        }
      },
      "aggs": {
        "sort_user": {
          "min": {
            "field": "date"
          }
        }
      }
    }
  }
}

搜索结果:

"aggregations": {
    "user_id": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": "user2",
          "doc_count": 1,
          "sort_user": {
            "value": 1.3885344E12,
            "value_as_string": "2014-01-01T00:00:00.000Z"
          }
        },
        {
          "key": "user1",
          "doc_count": 1,
          "sort_user": {
            "value": 1.4200704E12,
            "value_as_string": "2015-01-01T00:00:00.000Z"
          }
        },
        {
          "key": "user3",
          "doc_count": 1,
          "sort_user": {
            "value": 1.4209344E12,
            "value_as_string": "2015-01-11T00:00:00.000Z"
          }
        }
      ]
    }

【讨论】:

  • @Sanker 请仔细阅读我的回答,如果这能解决您的问题,请告诉我?
  • 当然谢谢...!如果我有 10k + 用户怎么办......?我可以将它与复合聚合或任何可用的分页选项一起使用吗??
  • 谢谢,我会的。但我的理解是不可能进行排序的复合聚合......无论如何我会尝试更新。
  • 大家好,我写了一篇关于分页聚合的文章。我希望它可以帮助spoon-elastic.com/all-elastic-search-post/…
  • 别担心 Bhavya 赞成你的答案是我做的第一件事 ;)
猜你喜欢
  • 2015-01-23
  • 2016-04-12
  • 2022-01-26
  • 2015-08-25
  • 1970-01-01
  • 2016-04-13
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多