elasticsearch多个字段分组查询

本文介绍了如何在Elasticsearch中使用聚合功能进行多字段分组查询,特别是结合日期类型转换和字符串截取的方法。通过示例展示了如何在`aggs`下配置`terms`和`top_hits`,实现日期、国家、城市等多个字段的分组,并限制每个桶的最小文档计数,同时获取每个分组的最相关文档。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GET /work_order_olap/_search
{
  "size": 0,
  "aggs": {
    "group_by_field": {
      "terms": {
        "size": 2,
        "script": "doc['material_no'] +'####'+doc['material_name']+'####'+doc['material_category']"
      }
      ,"aggs":{
        "total_material_cost":{
          "sum": {
            "field": "total_material_cost"
          }
        }
      }
    }
   
  }
}

方法2

GET /work_order_olap/_search
{
  "size": 0,
  "aggs": {
    "group_by_field": {
      "composite": {
        "size": 1200,
        "sources": [
          {
            "material_no": {
              "terms": {
                "field": "material_no"
              }
            }
          }
          , {
            "material_name": {
              "terms": {
                "field": "material_name"
              }
            }
          }
          , {
            "material_category": {
              "terms": {
                "field": "material_category"
              }
            }
          }
        ]
      }
      ,"aggs":{
        "total_material_cost":{
          "sum": {
            "field": "material_quantity"
          }
        }
      }
    }
   
  }
}

日期类型tostring 和字符串截取

 "aggs": {
    "NAME": {
      "terms": {
        "script": "(doc.pubdate.value+'').substring(0,10)+'####'+doc.country.value +'####'+doc.city.value+'####'+doc.death_toll.value+'####'+doc.injured_toll.value+'####'",
        "min_doc_count": 2, 
        "size": 100
      }
    , "aggs": {
      "NAME": {
        "top_hits": {
          "from": 0, 
          "size": 100,
          "_source": ["_id","time"],
          "sort": ["pubdate"]
        }
      }
    }
    }
  }

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值