elasticsearch geo使用

本文介绍了如何使用Elasticsearch进行地理位置搜索,通过建立索引、添加记录,并实现根据客户位置按距离进行门店的排序查询。重点在于地理位置的处理和结果的展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求

根据客户地理位置查询出符合条件的门店,按照距离排序。这里忽略了其他条件判断

建立索引

PUT /my_locations
{
    "mappings": {
        "properties": {
            "pin": {
                "properties": {
                    "location": {
                        "type": "geo_point"
                    }
                }
            }
        }
    }
}

添加记录

PUT my_locations/_doc/1
{
    "pin" : {
        "location" : {
            "lat" : 40.12,
            "lon" : -71.34
        }
    }
}

PUT my_locations/_doc/2
{
    "pin" : {
        "location" : {
            "lat" : 40.12,
            "lon" : -72.34
        }
    }
}

根据距离排序查询(按距离近远排序)

GET /my_locations/_search
{
    "sort" : [
        {
            "_geo_distance" : {
                "pin.location" : [-70, 40],
                "order" : "asc",
                "unit" : "km", // 距离单位 设置为km
                "mode" : "min",
                "distance_type" : "arc",
                "ignore_unmapped": true
            }
        }
    ],
   
        "query": {
        "bool": {
          "must": {
            "match_all": {}
          }
        }
      }
}

结果

{
    "took": 16,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 2,
            "relation": "eq"
        },
        "max_score": null,
        "hits": [
            {
                "_index": "my_locations",
                "_type": "_doc",
                "_id": "2",
                "_score": null,
                "_source": {
                    "pin": {
                        "location": {
                            "lat": 40.12,
                            "lon": -71.34
                        }
                    }
                },
                "sort": [
                    114.8181793764576
                ]
            },
            {
                "_index": "my_locations",
                "_type": "_doc",
                "_id": "1",
                "_score": null,
                "_source": {
                    "pin": {
                        "location": {
                            "lat": 40.12,
                            "lon": -72.34
                        }
                    }
                },
                "sort": [
                    199.58751303963078
                ]
            }
        ]
    }
}

参考

esdoc

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值