php-弹性搜索地理位置查询过滤器

我正在尝试使用geo_point作为距离,但是它总是显示位置类型为double而不是geo_point,如何设置映射到geo_point的位置.

实际上,我必须找到5公里以内的所有记录.

 "pin" : {
             "properties" : {
             "location" : {
             "properties" : {
             "lat" : {
             "type" : "double"
             },
                 "lon" : {
                 "type" : "double"
                 }
              }
              },
                  "type" : {
                  "type" : "string"
                  }
              }
              },

当我尝试使用以下查询搜索以查找delhi lat long 5km以内的结果时:

 {
          "query": {
            "filtered": {
              "query": {
                "match_all": {}
              },
              "filter": {
                "pin": {
                  "distance": "5",
                  "distance_unit": "km",
                  "coordinate": {
                    "lat": 28.5402707,
                    "lon": 77.2289643
                  }
                }
              }
            }
          }
        }

它向我显示错误query_parsing_exception,并且没有为[pin]注册查询.我无法弄清楚问题.它总是抛出这个异常

  {

            "error": {
                "root_cause": [
                    {
                        "type": "query_parsing_exception",
                        "reason": "No query registered for [pin]",
                        "index": "find_index",
                        "line": 1,
                        "col": 58
                    }
                ],
                "type": "search_phase_execution_exception",
                "reason": "all shards Failed",
                "phase": "query",
                "grouped": true,
                "Failed_shards": [
                    {
                        "shard": 0,
                        "index": "find_index",
                        "node": "DtpkEdLCSZCr8r2bTd8p5w",
                        "reason": {
                            "type": "query_parsing_exception",
                            "reason": "No query registered for [pin]",
                            "index": "find_index",
                            "line": 1,
                            "col": 58
                        }
                    }
                ]
            },
            "status": 400

        }

请帮助我找出这个问题.如何设置geo_point并解决此异常错误以及状态400和all_shards_Failed错误

解决方法:

您只需要这样映射您的引脚类型,即使用geo_point data type

# 1. first delete your index
DELETE shouut_find_index

# 2. create a new one with the proper mapping
PUT shouut_find_index
{
  "mappings": {
    "search_shouut": {
      "properties": {
        "location": {
          "type": "geo_point"
        },
        "type": {
          "type": "string"
        }
      }
    }
  }
}

然后,您可以像这样索引文档

PUT shouut_find_index/search_shouut/1
{ 
   "location": {
      "lat": 28.5402707,
      "lon": 77.2289643
   },
   "type": "dummy"
}

最后,您的查询可以如下所示

POST shouut_find_index/search_shouut/_search
{
  "query": {
    "filtered": {
      "filter": {
        "geo_distance": {
          "distance": "5km",
          "location": {
            "lat": 28.5402707,
            "lon": 77.2289643
          }
        }
      }
    }
  }
}

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...