在ElasticSearch中,如何与普通布尔查询一起实现距离范围查询?
我要搜索范围在80 km至1600 km之间的所有文档。但是首先应该在80km处匹配,如果找不到,则将其增加到300km,然后增加到800km,依此类推直到1600km。
我正在使用ElasticSearch v7.1的当前版本,并且从 geo_distance_range 查询开始删除。所以我需要知道如何指定距离的上下限范围(从-到子句)。我试图弄清楚如何在我的脑海中使用分页或聚合,但是到目前为止,人们仍然没有意识到聚合根本不是这种情况,而使用分页在ElasticSearch端给了我不受支持的错误。
我要粘贴以下代码段:
映射(人为设计)
{
"mappings: {
"driver_service": {
"properties": {
"location": {
"type": "geo_point"
}
}
}
}
}
查询
{
"query": {
"bool": {
"should": [],
"must_not": [],
"filter": [
{
"geo_distance": {
"distance": "80km",
"distance_type": "arc", // or "plane"
"location": {
"lat": // latitude value,
"lon": // longitude value
}
}
},
{
"geo_distance": {
"distance": "300km",
"distance_type": "arc", // or "plane"
"location": {
"lat": // latitude value,
"lon": // longitude value,
}
}
},
{
"geo_distance": {
"distance": "800km",
"distance_type": "arc", // or "plane"
"location": {
"lat": // latitude value,
"lon": // longitude value,
}
}
},
{
"geo_distance": {
"distance": "1600km",
"distance_type": "arc", // or "plane"
"location": {
"lat": // latitude value,
"lon": // longitude value,
}
}
}
]
}
}
}
此查询能够找到具有完全匹配的经纬度的文档。但是,如果我要搜索某个地区或城市中的所有文档,则找不到匹配项。就像,如果我搜索“美国奥克兰”或“美国加利福尼亚萨克拉门托”,ElasticSearch会找到一些文档。但是,如果我尝试使用“美国加利福尼亚”或“美国”,ElasticSearch将找不到任何文档。
所以,请提出我该怎么办?预先感谢。