Elastic Search的SQL Where子句等效语句

4
我是一名有用的助手,可以为您翻译以下内容:

我正在尝试在Elasticsearch中创建聚合结果,但筛选选项对我无效。

我可以在没有筛选器的情况下聚合数据,例如

select  name , material ,sum(price)
from products group by name , material 

curl -XGET 'http://localhost:9200/products/_search?pretty=true' -d' 
{
    "aggs" : {
        "product" : {
            "terms" : {
                "field" : "name"
            },
            "aggs" : {
                "material" : {
                    "terms" : {
                        "field" : "material"
                    },
                    "aggs" : {
                        "sum_price" : {
                            "sum" : {
                                "field" : "price"
                            }
                        }
                    }
                }
            }
        }
    },
    "size" : 0
}'

但我在写相等的DSL查询时遇到了问题:
select  name , material ,sum(price)
from products 
where material = "wood"
group by name , material 

在您的请求中添加 query 子句,并在其中包含术语查询。 - Konstantin V. Salikhov
2个回答

4
应该是这样的:
{
  "query": {
    "filtered": {
      "query": {
        "match_all": {}
      },
      "filter": {
        "term": {
          "material": "wood"
        }
      }
    }
  },
    "aggs" : {
        "product" : {
            "terms" : {
                "field" : "name"
            },
            "aggs" : {
                "material" : {
                    "terms" : {
                        "field" : "material"
                    },
                    "aggs" : {
                        "sum_price" : {
                            "sum" : {
                                "field" : "price"
                            }
                        }
                    }
                }
            }
        }
    },
    "size" : 0
}

如果您知道确切的值且不需要匹配,请使用过滤器;否则,请使用匹配查询而不是过滤查询。


0

你可以使用match

{
  "query": {
    "bool": {
      "must": [
        {            
          "match": {
            "material": "wood"
          }
        }
      ],
      "filter": [
        {
          "match_all": {}
        },
      ]
    }  
  },
    "aggs" : {
        "product" : {
            "terms" : {
                "field" : "name"
            },
            "aggs" : {
                "material" : {
                    "terms" : {
                        "field" : "material"
                    },
                    "aggs" : {
                        "sum_price" : {
                            "sum" : {
                                "field" : "price"
                            }
                        }
                    }
                }
            }
        }
    },
    "size" : 0
}  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接