我使用类似这样的文档进行弹性搜索:
{
id: 1,
price: 620000,
propertyType: "HO",
location: {
lat: 51.41999,
lon: -0.14426
},
active: true,
rentOrSale: "S",
}
我尝试使用聚合来获取使用聚合的特定区域的统计信息,我使用的查询如下:
{
"sort": [
{
"id": "desc"
}
],
"query": {
"bool": {
"must": [
{
"term": {
"rentOrSale": "s"
}
},
{
"term": {
"active": true
}
}
]
},
"filtered": {
"filter": {
"and": [
{
"geo_distance": {
"distance": "15.0mi",
"location": {
"lat": 51.50735,
"lon": -0.12776
}
}
}
]
}
}
},
"aggs": {
"propertytype_agg": {
"terms": {
"field": "propertyType"
},
"aggs": {
"avg_price": {
"avg": {
"field": "price"
}
}
}
},
"bed_agg": {
"terms": {
"field": "numberOfBedrooms"
},
"aggs": {
"avg_price": {
"avg": {
"field": "price"
}
}
}
}
}
}
但是在结果中我无法看到聚合。一旦我删除了bool或过滤的部分查询,我就可以看到聚合。我无法弄清楚为什么会发生这种情况,也不知道如何获得这些过滤器的聚合。我已尝试使用此question的答案,但我无法解决此问题。有什么想法吗?
答案 0 :(得分:1)
我认为您的查询需要稍微重新安排 - 移动"过滤"进一步重复"查询"命令:
"query": {
"filtered": {
"query" : {
"bool": {
...
}
},
"filter": {
...
}
}
}