我正在从Elasticsearch 1.7升级到6.7。更改之一是删除过滤查询,转而使用布尔查询。
我正在寻找转换以下查询的帮助。
我尝试将“和”更改为“必须”,将“过滤”更改为“布尔”
代码如下:
{
"size": 0,
"_source": false,
"query": {
"filtered": {
"filter": {
"and": [{
"geo_distance": {
"distance": "50mi"
"location": "35.323312, -23.14848"
}
},
{
"bool": {
"must": {
"term": {
"id_from_store": 99
}
}
}
},
{
"bool": {
"must": {
"term": {
"is_new": 1
}
}
}
},
{
"bool": {
"must": {
"range": {
"datetime_shelf": {
"gte": "2018-02-01"
}
}
}
}
}]
}
}
},
"aggs": {
"group_by_listing": {
"terms": {
"field": "p_id",
"size": 200
}
}
}
}
我该如何正确构造它?
答案 0 :(得分:2)
就像这样:
{
"size": 0,
"_source": false,
"query": {
"bool": {
"filter": [
{
"geo_distance": {
"distance": "50mi",
"location": "35.323312, -23.14848"
}
},
{
"term": {
"id_from_store": 99
}
},
{
"term": {
"is_new": false
}
},
{
"range": {
"datetime_shelf": {
"gte": "2018-02-01"
}
}
}
]
}
},
"aggs": {
"group_by_listing": {
"terms": {
"field": "p_id",
"size": 200
}
}
}
}
答案 1 :(得分:0)
查询的结构应如下所示。无需添加布尔值,并且必须针对每个查询
query" : {
"bool" : {
"must": [
{"geo_distance":<your_query>},
{"term":<your_query>},
{"term":<your_query>},
{"range":<your_query>}
]
}
}