一、场景
es版本号5.3.0,查询es索引里距离某点位(例:113.93900469,22.56172077)两百米内的所有记录,并按距离排序
二、操作步骤
1.语法
坐标字段类型是geo_point,如下:
,
"shape": {
"type": "geo_point"
}
该类型存值格式如下:
,
"shape": {
"lon": 113.93915649,
"lat": 22.56175467
}
查询语句如下:
{
"size": 10,
"query": {
"constant_score": {
"filter": {
"geo_distance": {
"distance": "0.2km",
"shape": {
"lon": 113.93900469,
"lat": 22.56172077
}
}
}
}
},
"sort": [
{
"_geo_distance": {
"shape": {
"lat": 22.56172077,
"lon": 113.93900469
},
"order": "asc",
"unit": "km"
}
}
]
}
2.返回结果
如下:
{
"_shards": {
"failed": 0,
"successful": 5,
"total": 5
},
"hits": {
"hits": [
{
"_id": "test1",
"_index": "test_index",
"_source": {
"name":"test_name",
"shape": {
"lat": 22.56175467,
"lon": 113.93915649
}
},
"_type": "test_type",
"sort": [
0.016029784039846947
]
}
],
"total": 1
},
"timed_out": false,
"took": 4
}
sort为记录和该点位的距离,单位是km千米。
总结
ElasticSearch用geo_distance筛选器做地理信息空间查询,要求筛选字段类型为geo_point类型。