多边形查询中的Elasticsearch点

时间:2019-04-28 18:09:41

标签: elasticsearch geospatial spatial elastic-stack spatial-query

我正在使用Elasticsearch V6.7.1.

我创建了一些索引,并用数据填充了它们。每个索引都有一个字段 gps_coordslat and lon值(坐标)

我想做的是编写一个查询,我传递一个多边形并检查某个点是否落入该多边形,这可能吗?

这是我已经尝试过的查询:

{
    "query": {
        "bool" : {
            "must" : {
                "match_all" : {}
            },
             "filter": {
                "geo_shape": {
                    "location": {
                        "shape": {
                            "type": "polygon",
                            "coordinates" : [
                                [25.0245351, 54.5693374], 
                                [25.0245351, 54.83232],
                                [25.4815808, 54.83232],
                                [25.4815808, 54.5693374],
                                [25.0245351, 54.5693374]
                              ]
                        },
                        "relation": "within"
                    }
                }
            }
        }
    }
}

但是它返回此错误:

{
  "error": {
    "root_cause": [
      {
        "type": "parse_exception",
        "reason": "Invalid LinearRing found. Found a single coordinate when expecting a coordinate array"
      }
    ],
    "type": "parse_exception",
    "reason": "Invalid LinearRing found. Found a single coordinate when expecting a coordinate array"
  },
  "status": 400
}

这是我的索引映射:

[
            'index' => 'places',
            'body' => [
                'mappings' => [
                    'place' => [
                        "properties" => [
                            "gps_coords" => [
                                "ignore_malformed" => true,
                                "type" => "geo_shape"
                            ]
                        ]
                    ],

                ],
                "number_of_replicas" => 0
            ]
        ]
    ];

有人可以指出我正确的方向吗?
谢谢!

2 个答案:

答案 0 :(得分:0)

首先,在查询示例中,您使用location字段而不是gps_coords,如注释中所述。但是我相信这只是一个错字,因为这不是错误的来源。

收到解析异常的原因是在geo_shape查询的多边形定义中缺少一对括号。请参阅正确的格式here。正确的格式为(仅是相关部分):

"shape": {
    "type": "polygon",
    "coordinates" : [
        [[25.0245351, 54.5693374], 
         [25.0245351, 54.83232],
         [25.4815808, 54.83232],
         [25.4815808, 54.5693374],
         [25.0245351, 54.5693374]]
    ]
}

答案 1 :(得分:0)

是的,抱歉,我不好,只是从ES文档中复制了示例,而不是我的代码。 Okey,将尝试添加这些括号,看看是否有帮助,谢谢!