使用聚合分析结果-《elasticsearch中文文档帮助手册教程V7.11》

admin 2025-11-04 00:04:21 数据库 来源:ZONE.CI 全球网 0 阅读模式
  • 使用聚合分析结果

    使用聚合分析结果

    Elasticsearch 聚合能让你获取搜索结果的元信息,并回答这些问题,如“德克萨斯州有多少账户所有者?”或“田纳西州的账户平均余额是多少?”。你可以在一个请求中搜索文档、过滤命中以及使用聚合分析结果。

    例如,以下的请求使用一个词语聚合分组在银行(bank)索引中按州对所有账户分组,并按降序返回账户最多的十个州:

    1. GET /bank/_search
    2. {
    3. "size": 0,
    4. "aggs": {
    5. "group_by_state": {
    6. "terms": {
    7. "field": "state.keyword"
    8. }
    9. }
    10. }
    11. }

    响应中的桶(bucket)是州(state)字段的值。doc_count 显示每个州的账户数量。例如,你可以看到 ID(爱达荷州)有 27 个账户。由于这个请求设置 size=0,这个请求只包含聚合结果。

    1. {
    2. "took": 29,
    3. "timed_out": false,
    4. "_shards": {
    5. "total": 5,
    6. "successful": 5,
    7. "skipped" : 0,
    8. "failed": 0
    9. },
    10. "hits" : {
    11. "total" : {
    12. "value": 1000,
    13. "relation": "eq"
    14. },
    15. "max_score" : null,
    16. "hits" : [ ]
    17. },
    18. "aggregations" : {
    19. "group_by_state" : {
    20. "doc_count_error_upper_bound": 20,
    21. "sum_other_doc_count": 770,
    22. "buckets" : [ {
    23. "key" : "ID",
    24. "doc_count" : 27
    25. }, {
    26. "key" : "TX",
    27. "doc_count" : 27
    28. }, {
    29. "key" : "AL",
    30. "doc_count" : 25
    31. }, {
    32. "key" : "MD",
    33. "doc_count" : 25
    34. }, {
    35. "key" : "TN",
    36. "doc_count" : 23
    37. }, {
    38. "key" : "MA",
    39. "doc_count" : 21
    40. }, {
    41. "key" : "NC",
    42. "doc_count" : 21
    43. }, {
    44. "key" : "ND",
    45. "doc_count" : 21
    46. }, {
    47. "key" : "ME",
    48. "doc_count" : 20
    49. }, {
    50. "key" : "MO",
    51. "doc_count" : 20
    52. } ]
    53. }
    54. }
    55. }

    你可以合并聚合来构建更复杂的数据摘要。例如,以下请求在前一个按州分组(group_by_state)聚合嵌套一个 avg 聚合,以计算每个州的平均账户余额。

    1. GET /bank/_search
    2. {
    3. "size": 0,
    4. "aggs": {
    5. "group_by_state": {
    6. "terms": {
    7. "field": "state.keyword"
    8. },
    9. "aggs": {
    10. "average_balance": {
    11. "avg": {
    12. "field": "balance"
    13. }
    14. }
    15. }
    16. }
    17. }
    18. }

    你可以使用嵌套聚合结果进行排序(通过指定词语聚合顺序),而不是按计数结果进行排序:

    1. GET /bank/_search
    2. {
    3. "size": 0,
    4. "aggs": {
    5. "group_by_state": {
    6. "terms": {
    7. "field": "state.keyword",
    8. "order": {
    9. "average_balance": "desc"
    10. }
    11. },
    12. "aggs": {
    13. "average_balance": {
    14. "avg": {
    15. "field": "balance"
    16. }
    17. }
    18. }
    19. }
    20. }
    21. }

    除了这些基本的桶和度量聚合外,Elasticsearch 提供了特定的聚合用于操作多个字段和分析特定类型数据,如日期、IP 地址以及地理数据。你还可以将单个聚合的结果输入管道聚合用于进一步的分析。

    聚合提供的核心分析能力支持高级特性,如使用机器学习来检测异常。

    原文链接

    评论:0   参与:  9