【问题标题】:Get more fields instead of only one in Elasticsearch aggregation在 Elasticsearch 聚合中获取更多字段而不是仅一个字段
【发布时间】:2016-04-10 15:14:31
【问题描述】:

我是 Elasticsearch 新手,我的程序有问题。
为了对结果进行分组,如 SQL 中的“group by”语句。我使用了聚合。
但我意识到我需要在这里解决一个问题。我使用以下语句对结果进行分组:

{
  "aggs": {
    "agg1": {
      "terms": {
        "field": "field1"
      },
      "aggs": {
        "agg2": {
          "terms": {
            "field": "field2"
          },
          "aggs": {
            "agg3": {
              "terms": {
                "field": "field3"
              }
            }
          }          
        }
      }
    }
  }
}

我的问题是:field2和field3的值取决于field1的值,所以如果你能得到field1的值,你也可以得到field2和field3的值。因此,像上面那样进行聚合将花费大量时间来完成我的程序(我已经对其进行了测试并意识到它比仅对 field1 进行分组要慢 6 倍)。
所以我的问题是:是否可以只对 field1 进行分组(只使用一个“aggs”),但同时获得 field2 和 field3 的值?
如果没有,还有其他可能的方法来完成我的工作吗?
在此先感谢:)

【问题讨论】:

    标签: elasticsearch nosql


    【解决方案1】:

    如果我理解正确,您正在寻找Top Hits 聚合,您可以在source filtering 中包含任意数量的字段,试试这个

    {
      "size": 0,
      "aggs": {
        "agg1": {
          "terms": {
            "field": "field1"
          },
          "aggs": {
            "include_fields": {
              "top_hits": {
                "size": 100,
                "_source": {
                  "include": [
                    "field2",
                    "field3"
                  ]
                }
              }
            }
          }
        }
      }
    }
    

    【讨论】:

    • 非常感谢,我需要让“size”等于1。
    • 很高兴我能帮上忙,你可以根据自己的需要调整大小,默认为 10
    猜你喜欢
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 2018-10-18
    • 2015-07-12
    • 1970-01-01
    相关资源
    最近更新 更多