我正在使用Elasticsearch V6.7.1.
我创建了一些索引,并用数据填充了它们。每个索引都有一个字段
gps_coords
与lat 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
]
]
];
有人可以指出我正确的方向吗?
谢谢!
答案 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,将尝试添加这些括号,看看是否有帮助,谢谢!