首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用多个值按同一字段进行分组?

问如何使用多个值按同一字段进行分组?
EN

Stack Overflow用户
提问于 2022-10-26 06:10:13
回答 1查看 35关注 0票数 1

当我搜索elasticsearch聚合时,我只找到用于按多个字段分组的multi_terms。但我正在寻找如何用多个值对一个字段进行分组。

我有一个字段product,它的值可以是fruit、electronic、veg、furniture等。我喜欢按值为fruit或veg的所有文档分组。我怎样才能做到这一点?

我正在寻找一种不更新索引映射的方法。由于product的值经常更改,所以我需要在运行时支持组字段的任何组合。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-26 06:35:35

您可以使用脚本和术语聚合。

我使用了映射,这是一个脚本,它将为产品蔬菜和水果发出单个值,您可以使用这些值来分组数据。

还可以对运行时字段进行索引以提高性能。

代码语言:javascript
复制
{
  "runtime_mappings": {
    "product_custom": {
      "type": "keyword",
      "script": {
        "source": """
                      if(doc["product.keyword"].value=="vegetable" 
                        || doc["product.keyword"].value=="fruit")
                      {
                        emit("vegetable/fruit");  
                      }
                      else
                      {
                        emit(doc["product.keyword"].value);
                      }
                  """
      }
    }
  },
  "aggs": {
    "product_custom": {
      "terms": {
        "field": "product_custom"
      }
    }
  }
}

结果

代码语言:javascript
复制
"aggregations" : {
    "product_custom" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : "vegetable/fruit",
          "doc_count" : 3
        },
        {
          "key" : "electronic",
          "doc_count" : 1
        }
      ]
    }
  }

更新

运行时字段可从7.11版本起使用。

您还可以使用术语聚合脚本来实现相同的目标。

代码语言:javascript
复制
{
  "aggs": {
    "product_custom": {
      "terms": {
        "script": {
          "source": """
                     if(doc["product.keyword"].value=="vegetable" 
                        || doc["product.keyword"].value=="fruit")
                      {
                        return "vegetable/fruit";  
                      }
                      else
                      {
                        return doc["product.keyword"].value;
                      }
                    """
        }
      }
    }
  }
}

脚本和运行/时间映射很慢,因为所有工作都是在搜索时完成的。可以将运行时字段添加到索引中,而无需重新创建索引。它将提供比脚本更好的性能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74203342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档