1. 程式人生 > >elasticsearch 經緯度查詢

elasticsearch 經緯度查詢

elasticsearch 經緯度查詢

curl -XPUT "http://localhost:9200/shop/" -d '{ "mappings": { "shop": { "properties": { "name": { "type": "string" }, "location": { "type": "geo_point",//經緯度類型 "lat_lon": true, "fielddata": { "format": "compressed", //壓縮模式,節省內存 "precision": "3m" } } } } } }'; curl -XPUT http://localhost:9200/shop/shop/1 -d' {"name": "北京", "location" : "39.9047253699,116.4072154982"} '; curl -XPUT http://localhost:9200/shop/shop/2 -d' {"name": "順義", "location" : "40.1299127031,116.6569478577"} '; curl -XPUT http://localhost:9200/shop/shop/3 -d' {"name": "天津", "location" : "39.0850853357,117.1993482089"} '; curl -XPUT http://localhost:9200/shop/shop/4 -d' {"name": "上海", "location" : "31.2304324029,121.4737919321"} '; curl -XGET "http://localhost:9200/shop/shop/_search?pretty" -d '{ "query": { "filtered": { "filter": { "geo_distance": { "distance": "28km", "type": "indexed", "distance_type": "sloppy_arc", "location": { "lat": 39.9682060617, "lon": 116.4107280170 } } } } }, "sort": [ //按距離排序 { "_geo_distance": { "location": { "lat": 39.9682060617, "lon": 116.4107280170 }, "order": "asc", "unit": "km", "distance_type": "sloppy_arc" //推薦適應此模式 plane 不準,精度太差 } } ] }' 再舉一個更加實際的例子 curl -XGET "http://localhost:9200/shop/shop/_search?pretty" -d '{ "query" : { "function_score" : { "query" : { "bool" : { "filter" : { "geo_distance": { "distance": "28km", "type": "indexed", "distance_type": "sloppy_arc", "location": { "lat": 39.9682060617, "lon": 116.4107280170 } } } } }, "functions" : [ { "script_score" : { "script" : { "inline" : "return 0" } } },{ "gauss": { //按舉例遠近打分 "location": { "origin": "39.9682060617,116.4107280170", "scale": "5km", "offset": "0", "decay": 0.5 } }, "weight": "1" } ], "score_mode" : "sum", "boost_mode" : "replace" } } }' 此時你會看到北京的得分是0.25分,因為差5公裏,衰減0.5, 北京距此坐標7公裏,所以取值0.25.


elasticsearch 經緯度查詢