簡體   English   中英

Elasticsearch 由嵌套的 object 聚合

[英]Elasticsearch aggregation by nested object

我正在嘗試為電子商務應用程序構建帶有方面過濾的產品搜索。 對於產品品牌,我有以下結構:

"brand": {
    "type": "nested",
    "properties": {
        "name": {
            "type": "text"
        },
        "id": {
            "type": "integer"
        }
    }
}

我想按品牌 ID 進行聚合並返回整個 object 和文檔數。 像這樣的東西:

"brands" : {
    "doc_count_error_upper_bound" : 0,
    "sum_other_doc_count" : 0,
    "buckets" : [
    {
        "key" : {
            "name": "Apple",
            "id": 1
        },
        "doc_count" : 34
    },
    {
        "key" : {
            "name": "Samsung",
            "id": 2
        },
        "doc_count" : 23
    }
    ]
}

目前我正在編寫這樣的聚合:

"aggs": {
    "brands": {
        "nested": {
            "path": "brand"
        }, 
        "aggs": {
            "brandIds": {
                "terms": {
                "field": "brand.id"
                }
            }
        }
    },
}

結果如下所示:

"aggregations" : {
    "brands" : {
        "doc_count" : 15,
        "brandIds" : {
            "doc_count_error_upper_bound" : 0,
            "sum_other_doc_count" : 0,
            "buckets" : [
                {
                    "key" : 1,
                    "doc_count" : 4
                },
                {
                    "key" : 2,
                    "doc_count" : 2
                }
            ]
        }
    }
}

您可以像這樣在Term Aggregation中使用Terms Aggregation

GET {index_name}/_search
{
  "size": 0,
  "query": {
   "match_all": {}
  }, 
  "aggs": {
    "brands": {
      "nested": {
        "path": "brand"
      },
      "aggs": {
        "brandIds": {
          "terms": {
            "field": "brand.id"
          }, 
          "aggs": {
            "by name": {
              "terms": {
                "field": "brand.name.keyword",
                "size": 10
              }
            }
          }
        }
      }
    }
  }
}

這將導致這樣的事情:

"aggregations": {
    "brands": {
      "doc_count": 68,
      "brandIds": {
        "doc_count_error_upper_bound": 0,
        "sum_other_doc_count": 0,
        "buckets": [
          {
            "key": 1,
            "doc_count": 46,
            "by name": {
              "doc_count_error_upper_bound": 0,
              "sum_other_doc_count": 0,
              "buckets": [
                {
                  "key": "Apple",
                  "doc_count": 46
                }
              ]
            }
          },
          {
            "key": 2,
            "doc_count": 22,
            "ny id": {
              "doc_count_error_upper_bound": 0,
              "sum_other_doc_count": 0,
              "buckets": [
                {
                  "key": "Samsung",
                  "doc_count": 22
                }
              ]
            }
          }
        ]
      }
    }
  }

希望這可以幫助!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM