elasticsearch 经纬度查询

时间:2017-12-07 11:47:03   收藏:0   阅读:261
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.


原文:http://blog.51cto.com/12597095/2048249

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!