我尝试使用地理距离和字段过滤数据,例如' has_cctv'或者' has_instant_bookings'。
{
"query" : {
"filtered" : {
"filter" : {
"geo_distance": {
"distance": 10000,
"lat_lng": {
"lat": "51.5073509",
"lon": "-0.1277583"
}
}
}
}
}
}
我尝试了多种使用术语过滤的组合,但似乎无法解决过去的错误。例如:
{
"query" : {
"filtered" : {
"filter" : {
"terms": [
{"term": {"has_cctv": 1}}
],
"geo_distance": {
"distance": 10000,
"lat_lng": {
"lat": "51.5073509",
"lon": "-0.1277583"
}
}
}
}
}
}
这使我' [terms]过滤器不支持查找元素中的[has_cctv]'。这可能是我的查询有问题,还是数据存储方式有问题?
答案 0 :(得分:2)
或者您可以使用and
过滤器并将两个过滤器组合在一起。以及bool filter
和and/or/not filters
之间的比较:http://www.elasticsearch.org/blog/all-about-elasticsearch-filter-bitsets/
{
"query": {
"filtered": {
"filter": {
"and": {
"filters": [
{
"term": {
"has_cctv": "1"
}
},
{
"geo_distance": {
"distance": 10000,
"lat_lng": {
"lat": "51.5073509",
"lon": "-0.1277583"
}
}
}
]
}
}
}
}
}
答案 1 :(得分:2)
这是正确的查询:
POST _search
{
"query": {
"filtered": {
"query": {
"term": {
"has_cctv": {
"value": 1
}
}
},
"filter": {
"geo_distance": {
"distance": 10000,
"lat_lng": {
"lat": "51.5073509",
"lon": "-0.1277583"
}
}
}
}
}
}
确保lat_lng存储为geo_point
由于 Bharvi
答案 2 :(得分:1)
两个错误。
由于您有多个过滤器,因此需要添加bool filter
并将每个过滤器放在must
子句中。
那么您不需要terms
过滤器,而是term
过滤器。