php - 使用 Elasticsearch 进行地理搜索

标签 php elasticsearch

这只是一个快速的问题。我打算将我的搜索系统更改为 Elasticsearch 。如果我在请求中向 elasticsearch 发送三条信息:

  • 纬度
  • 距离

  • 我的 elasticsearch 结果标记有以下信息:
  • 纬度

  • 我是否可以只返回该距离内的结果而不需要任何额外的 Elasticsearch 插件?这个功能是否内置在 elasticsearch 中?

    最佳答案

    是的,只需三个非常简单的步骤。您必须映射数据(例如设置数据库模式)、插入数据,然后搜索它(过滤器)。

    您必须适本地映射该字段,以便将其识别为 geo_point .注意:如果您想要更灵活地存储其他类型的地理位置(例如,多边形或线串),那么您需要将其映射为 geo_shape .

    {
      "mappings" : {
        "TYPE_NAME" : {
          "properties" : {
            "fieldName" : { "type" : "geo_point" }
          }
        }
      }
    }
    

    映射后,您可以使用 point type 插入位置详细信息.
    {
      "fieldName" : {
        "type" : "point",
        "coordinates" : [ longitude, latitude ]
      }
    }
    

    您可以以不同的方式输入它以获得相同的效果,但可能更直观(而不是 [ X, Y ],这不是最常见的地理空间顺序)。
    {
      "fieldName" : {
        "type" : "point",
        "coordinates" : {
          "lat" : latitude,
          "lon" : longitude
        }
      }
    }
    

    无论哪种方式,它将代表相同的事物(过滤器中的以下内容也是如此)。

    映射字段并开始插入点后,您可以运行 geo_distance filter在所需的 distance 内查找点:
    {
      "filtered" : {
        "query" : { "match_all" : {} },
        "filter" : {
          "geo_distance" : {
            "distance" : "10mi",
            "fieldName" : [ longitude, latitude ]
          }
        }
      }
    }
    

    关于php - 使用 Elasticsearch 进行地理搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25652294/

    相关文章:

    php - 有没有办法可以查询 mysql 并将 json 数据内部连接在一起?

    php - 带有由 php 调用的变量的 SQL 查询问题

    PHP "Use of undefined constant"来自 $_POST

    php - 使用可能的字典从 PHP 数组创建一个 JSON 字符串

    python-2.7 - Elasticsearch parallel_bulk上的连接超时

    node.js - 如何通过AWS lambda nodejs函数索引存储在S3中的XML文件?

    php - 在 Drupal 中从 Excel 中提取内容

    c# - Elasticsearch-按分数过滤前N个文档,然后按字段排序

    c# - 将查询添加到字段时,NEST Elasticsearch空响应

    elasticsearch - Elasticsearch是否适合作为最终存储解决方案?