美文网首页
Elasticsearch geo_point 按距离搜索 --

Elasticsearch geo_point 按距离搜索 --

作者: 一位先生_ | 来源:发表于2022-06-02 21:14 被阅读0次

    如果ES索引的字段类型为:geo_point,我们就可以按距离搜索文档。

    下面以搜索附近店铺为例子介绍具体用法。

    1.创建店铺索引

    PUT /shops
    {
      "mappings": {
        "properties": {
          "id": { // 店铺Id
            "type": "integer"
          },
          "title": { // 店铺名
            "type": "text"
          },
          "location": { // 店铺经纬度
            "type": "geo_point"
          }
        }
      }
    }
    

    2.按距离搜索

    通过geo_distance搜索指定距离内的文档。

    例子:

    GET /shops/_search
    {
      "query": { // query查询
        "bool": { // 布尔组合查询
          "must": { 
            "match_all": {} // 这里不设置其他查询条件,所以匹配全部文档
          },
          "filter": { // 因为地理信息搜索不打算参与相关度计算,所以使用filter包裹geo_distance
            "geo_distance": { // geo_distance按距离搜索
              "distance": "1km", // 设置搜索距离为1千米
              "location": { // 搜索location字段存储的经纬度和当前经纬度之间的距离。
                "lat": 39.889916, // 当前纬度
                "lon": 116.379547 // 当前经度
              }
            }
          }
        }
      }
    }
    

    搜索当前经纬度location字段存储的经纬度之间的距离在1千米范围之内的所有文档。

    geo_distance参数说明:

    • distance - 设置搜索距离,常用距离单位:km(千米)、m(米)
    • 当前经纬度坐标点。

    提示:既然要计算距离,肯定需要知道两个坐标点才能计算,所以geo_distance参数需要提供当前坐标点。

    相关文章

      网友评论

          本文标题:Elasticsearch geo_point 按距离搜索 --

          本文链接:https://www.haomeiwen.com/subject/wwnfsrtx.html