代码之家  ›  专栏  ›  技术社区  ›  Sriram

Elasticsearch数组值计数聚合

  •  6
  • Sriram  · 技术社区  · 8 年前

    示例文档 :

    {
        "id": "62655",
        "attributes": [
            {
                "name": "genre",
                "value": "comedy"
            },
            {
                "name": "year",
                "value": "2016"
            }
        ]
    }
    
    {
        "id": "62656",
        "attributes": [
            {
                "name": "genre",
                "value": "horror"
            },
            {
                "name": "year",
                "value": "2016"
            }
        ]
    }
    
    {
        "id": "62657",
        "attributes": [
            {
                "name": "language",
                "value": "english"
            },
            {
                "name": "year",
                "value": "2015"
            }
        ]
    }
    

    预期产出 :

    {
        "hits" : {
            "total": 3,
            "hits": []
        },
        "aggregations": {
            "attribCount": {
                "language": 1,
                "genre": 2,
                "year": 3
            },
            "attribVals": {
                "language": {
                    "english": 1
                },
                "genre": {
                    "comedy": 1,
                    "horror": 1
                },
                "year": {
                    "2016": 2,
                    "2015": 1
                }
            }
        }
    }
    

    我的查询 :

    我可以得到“ 属性计数 “使用下面的查询进行聚合。但我不知道如何获取每个属性值计数。

    {
        "query": {
            "filtered": {
                "query": {
                    "match_all": {}
                }
            }
        },
        "aggs": {
            "attribCount": {
                "terms": {
                    "field": "attributes.name",
                    "size": 0
                }
            }
        },
        "size": 0
    }
    

    2 回复  |  直到 8 年前
        1
  •  5
  •   blackmamba    8 年前

    正如您所说,属性字段是嵌套的。 试试这个,这会管用的

    {
      "size": 0,
      "aggs": {
        "count": {
          "nested": {
            "path": "attributes"
          },
          "aggs": {
            "attribCount": {
              "terms": {
                "field": "attributes.name"
              }
            },
            "attribVal": {
              "terms": {
                "field": "attributes.name"
              },
              "aggs": {
                "attribval2": {
                  "terms": {
                    "field": "attributes.value"
                  }
                }
              }
            }
          }
        }
      }
    }
    
        2
  •  0
  •   Yuvraj SIngh Chundawat    2 年前

    如果我的品牌字段没有嵌套怎么办?

    示例文档:

    {
        "id": "62655",
        "attributes": [
            {
                "name": "Brand",
                "value": "HP"
            },
            {
                "name": "Color",
                "value": "Red"
            }
        ]
    }
    
    {
        "id": "62656",
        "attributes": [
            {
                "name": "Brand",
                "value": "Asus"
            },
            {
                "name": "Color",
                "value": "Blue"
            }
        ]
    }
    
    {
        "id": "62657",
        "attributes": [
            {
                "name": "Brand",
                "value": "Samsung"
            },
            {
                "name": "Type",
                "value": "Touch"
            }
        ]
    }
    

    预期产出:

     "aggregations": {
            "filter": {
                "doc_count_error_upper_bound": 0,
                "sum_other_doc_count": 0,
                "buckets": [
                    {
                        "key": "HP",
                        "doc_count": 1
                    },
                    {
                        "key": "Samsung",
                        "doc_count": 1
                    },
                    {
                        "key": "Asus",
                        "doc_count": 1
                    }
                  ]
            }
        }
    

    我的查询:

    "aggregations": {
       "filter": {
           "terms": {
              "field": "attributes.value.keyword"
          }
       }
    }