首页 > 解决方案 > ElasticSearch - 如何使用字段别名进行嵌套字段聚合?

问题描述

我正在尝试查询嵌套字段的内部命中的基数,但它不适用于字段别名(其中 resellers.price 是别名)。我正在使用弹性搜索示例来展示这一点

GET /products/_search
{
  "aggs": {
    "resellers": {
      "nested": {
        "path": "resellers"
      },
      "aggs": {
        "unique_prices": {
        "cardinality": { "field": "resellers.price" } 
         }
      }
    }
  }
}

标签: elasticsearch

解决方案


添加带有索引数据、映射、搜索查询和搜索结果的工作示例

索引映射:

{
  "mappings": {
    "properties": {
      "resellers": {
        "type": "nested",
        "properties": {
          "cost": {
            "type": "integer"
          },
          "price": {
            "type": "alias",
            "path": "resellers.cost"
          }
        }
      }
    }
  }
}

指数数据:

{
  "resellers": {
    "cost": 200
  }
}
{
  "resellers": {
    "cost": 100
  }
}
{
  "resellers": {
    "cost": 200
  }
}

搜索查询:

{
  "size": 0,
  "aggs": {
    "resellers": {
      "nested": {
        "path": "resellers"
      },
      "aggs": {
        "unique_prices": {
          "cardinality": {
            "field": "resellers.price"
          }
        }
      }
    }
  }
}

搜索结果:

"aggregations": {
    "resellers": {
      "doc_count": 3,
      "unique_prices": {
        "value": 2
      }
    }
  }

推荐阅读