我尝试过:
GET thing/_search
{
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": {
"geo_bounding_box": {
"location": {
"top_left": {
"lat": 47.7328,
"lon": -122.448
},
"bottom_right": {
"lat": 47.468,
"lon": -122.0924
}
}
}
}
}
}
}
...但得到以下错误:
"failed_shards" : [
{
"shard" : 0,
"index" : "geofence",
"node" : "rLGHWGhqRTqDxDlhjA3hhA",
"reason" : {
"type" : "query_shard_exception",
"reason" : "failed to find geo_point field [location]",
"index" : "geofence",
"index_uuid" : "sBbXbANQROeQ15IzmBRf3g"
}
}
]
......因此,我补充说:
PUT /thing/_mapping
{
"mappings": {
"properties": {
"point": {
"type": "geo_point"
}
}
}
}
...返回以下错误:
"type" : "mapper_parsing_exception",
"reason" : "Root mapping definition has unsupported parameters: [mappings : {properties={point={type=geo_point}}}]"
此查询适用于:
GET geofence/_search
{
"query": {
"geo_shape": {
"geometry": {
"shape": {
"type": "envelope",
"coordinates": [ [ -90.0, 90.0], [ 90.0, -90.0] ]
},
"relation": "WITHIN"
}
}
}
}
...但这不是边界框,对于-90.0以外的任何值(如-122.0)都将失败
给定以下几何形状:
"geometry" : {
"type" : "Polygon",
"coordinates" : [
[
[
-122.661806,
45.596338
],
[
-122.661324,
45.597164
],
[
-122.661865,
45.597326
],
[
-122.662461,
45.597532
],
[
-122.662868,
45.597652
],
[
-122.663405,
45.597825
],
[
-122.664381,
45.598088
],
[
-122.66421,
45.598846
],
[
-122.663995,
45.599551
],
[
-122.663974,
45.599672
],
[
-122.664135,
45.599844
],
[
-122.663898,
45.600662
],
[
-122.664574,
45.60088
],
[
-122.665272,
45.601008
],
[
-122.665808,
45.601128
],
[
-122.666162,
45.599799
],
[
-122.665304,
45.599582
],
[
-122.665411,
45.599046
],
[
-122.66599,
45.597269
],
[
-122.66378,
45.596884
],
[
-122.661806,
45.596338
]
]
]
},
查询边界框内多边形列表的正确方法是什么?
2条答案
按热度按时间n6lpvg4x1#
错误状态
找不到geo_point字段[位置]
因此,您需要在Map中添加
geo_point
类型的location
字段,如下所示:然后你的第一个查询就可以工作了,只要你确保把数据索引到新的location字段中,但是你的第一个查询只会在给定的边界框内找到“点”。
如果要查找边界框内的面,则需要在
geo_shape
字段上使用geo_shape
queryjxct1oxe2#
这给出了一个实际的基于坐标的查找与bbox(或任何信封实际上是)...
上面的坐标在北美洲周围画了一个方框。