【问题标题】:Elastic search 6.2 group by query弹性搜索 6.2 按查询分组
【发布时间】:2021-09-07 21:30:40
【问题描述】:

弹性搜索版本: 6.2

我想要按特定字段的计数数据组

示例

假设我有 3 个以下文档

{ 字段1:“值1” } { 字段1:“值2” } { 字段1:“值2” }

我想要以下结果

值1:1

值2:2

注意:字段为文本类型

【问题讨论】:

    标签: elasticsearch lucene elastic-stack


    【解决方案1】:

    您可以简单地使用terms aggregation

    {
      "size": 0,
      "aggs": {
        "groups": {
          "terms": {
            "field": "field1"
          }
        }
      }
    }
    

    【讨论】:

    • 嗨@Val,这种方法存在一个问题,假设字段值为“abc xyz”,因此它以不同的方式考虑“abc”和xyz。有什么建议吗?
    • 实际上,它是一个文本字段,这将是主要的原因。文本字段的任何解决方法?
    • @LakhanJain 您可以按照以下线程继续添加keyword 子字段:stackoverflow.com/a/58195999/4604579 或使用@cmhteixeira 共享的链接
    • 真的没有...除了增加一点它在磁盘上占用的空间。如果您不需要 text 字段,您也可以决定只使用 keyword 字段。
    【解决方案2】:

    您想要的称为聚合。这是查询:

    GET /yourIndex/_search
    {
      "aggs": {
        "myCustomAggregation": {
          "terms": {
            "field": "field1"
          }
        }
      }
    }
    

    但是请注意,您不能对属于 text 字段的字段(在您的情况下为字段 field1)执行聚合。您应该将该字段设置为keyword

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多