ElasticSearch - how to exclude filter from aggregations?

前端 未结 2 1419
暗喜
暗喜 2021-01-02 12:13

I have filtered query with 3 filters: \"query\": \"iphone\", color:5, category:10, brand:25.

How can I get amount of products in each brand which have <

相关标签:
2条回答
  • 2021-01-02 13:10

    We are just moving from SOLR and we are facing the same issue.

    You could try global bucket then add a query filter for each bucket :

    "filter" : {
                "query" : {
                    "query_string" : {
                        "query" : "iPhone"
                    }
                }
            }
    

    You should end with something like :

    {
        "size": 10,
        "query": {
            "query_string": {
                "query": "iphone"
            }
        },
        "filter": {
            "bool": {
                "must": [
                    {
                        "term": {
                            "brand": "564"
                        }
                    },
                    {
                        "term": {
                            "color": "5"
                        }
                    },
                    {
                        "term": {
                            "category": "10"
                        }
                    }
                ]
            }
        },
        "aggs": {
            "all": {
                "global": {},
                "aggs": {
                    "keyword": {
                        "filter": {
                            "bool": {
                                "must": [
                                    {
                                        "query": {
                                            "query_string": {
                                                "query": "iphone"
                                            }
                                        }
                                    },
                                    {
                                        "term": {
                                            "color": "5"
                                        }
                                    },
                                    {
                                        "term": {
                                            "category": "10"
                                        }
                                    }
                                ]
                            }
                        },
                        "aggs": {
                            "brand": {
                                "terms": {
                                    "field": "brand"
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    
    0 讨论(0)
  • 2021-01-02 13:17

    In addition to @Lionel Sengkouvanh answer, here's the equivalent with the java API:

    SearchRequestBuilder request = client
      .prepareSearch(INDEX_NAME)
      .setQuery(theQuery)
      ...
      .addAggregation(
         AggregationBuilders.global("all").subAggregation(      
           AggregationBuilders.filter("keyword").filter(filter).subAggregation(
             AggregationBuilders.terms("brand").field("brand")  
           )
         )
      );
    
    0 讨论(0)
提交回复
热议问题