简体   繁体   English

如何在Elasticsearch中聚合嵌套对象

[英]How to aggregate on nested objects in elasticsearch

I have the following mapping in ES: 我在ES中具有以下映射:

"mappings": {
    "products": {
        "properties": {
            "product": {
                "type" : "nested",
                "properties": {
                    "features": {
                        "type": "nested"
                    },
                    "sitedetails": {
                        "type": "nested"
                    }
                }
            }
        }
    }
}

and then 3 products like this: 然后是3个类似的产品:

 "hits": [
     {
        "_index": "catalog",
        "_type": "products",
        "_id": "AVNE8F4mFYOWvB4rMqdO",
        "_score": 1,
        "_source": {
           "product": {
              "ean": "abc",
              "features": {
                 "productType": "DVD player"
              },
              "color": "Black",
              "manufacturer": "Sony",
              "sitedetails": [
                 {
                    "name": "amazon.com",
                    "sku": "zzz",
                    "url": "http://www.amazon.com/dp/zzz"
                 }
              ],
              "category": "Portable DVD Players"
           }
        }
     },
     {
        "_index": "catalog",
        "_type": "products",
        "_id": "AVNE8XkXFYOWvB4rMqdQ",
        "_score": 1,
        "_source": {
           "product": {
              "ean": "def",
              "features": {
                 "ProductType": "MP3 player"
              },
              "color": "Black",
              "manufacturer": "LG",
              "sitedetails": [
                 {
                    "name": "amazon.com",
                    "sku": "aaa",
                    "url": "http://www.amazon.com/dp/aaa"
                 }
              ],
              "category": "MP3 Players"
           }
        }
     },
     {
        "_index": "catalog",
        "_type": "products",
        "_id": "AVNIh-xVWwxj6Cz_r8AT",
        "_score": 1,
        "_source": {
           "product": {
              "ean": "abc",
              "features": {
                 "productType": "DVD player"
              },
              "color": "White",
              "manufacturer": "Sony",
              "sitedetails": [
                 {
                    "name": "amazon.com",
                    "sku": "ggg",
                    "url": "http://www.amazon.com/dp/ggg"
                 }
              ],
              "category": "Portable DVD Players"
           }
        }
     }
  ]

I need to display on the UI side 2 filters, one for Manufacturer and one for website. 我需要在用户界面侧显示2个过滤器,一个用于制造商,一个用于网站。 How can I aggregate on product.manufacturer and product.sitedetails.name? 如何汇总product.manufacturer和product.sitedetails.name?

tnx! tnx!

Figured it out: 弄清楚了:

GET /catalog/products/_search
{
"aggs": {
    "byManufacturer": {
        "nested": {
            "path": "product"
            },
            "aggs": {
                "byManufacturer": {
                    "terms": {
                        "field": "product.manufacturer"
                    }
                }
            }
        },
    "bySeller": {
        "nested": {
            "path": "product.sitedetails"
            },
            "aggs": {
                "bySeller": {
                    "terms": {
                        "field": "product.sitedetails.name"
                    }
                }
            }
        }    
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM