我有一些条目带有“ xyz”,愿意开车一定距离。
范围位于文档上,反之亦然
我将如何构建查询来满足这一要求?
谢谢
我的记录看起来很像这样
{
"name": "XYZ",
"pin": {
"name": "Bradford",
"location": {
"lat": 51.5,
"lon": 0.1
}
},
"max_travel_radius": "25km"
}
常规地理位置距离查询 会产生错误的结果,因为它与“搜索者”与条目的距离无关
条目具有半径,“搜索者”可以访问
答案 0 :(得分:1)
您需要创建具有geo_shape而不是位置的文档。您应该使用的Geo_shape是圆形,您可以在其中指定人物位置和max_travel_distance作为半径。请在此url处查看圈子。您的输入文档可能看起来像
{
"name": "XYZ",
"pin": {
"name": "Bradford",
"location": {
"type": circle,
"coordinates" : [101.0, 1.0],
"radius" : "25000m"
}
}
}
接下来,您应该使用geo_shape query检查点是否位于您上面创建的文档形状的WITHIN中。样例查询将类似于(您需要为嵌套查询更改它。在此处仅举一个示例)
GET /example/_search
{
"query":{
"bool": {
"must": {
"match_all": {}
},
"filter": {
"geo_shape": {
"location": {
"shape": {
"type": "point",
"coordinates" : [102.0, 2.0]
},
"relation": "contains"
}
}
}
}
}
}