版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_20079921/article/details/89923794
参考链接:https://github.com/elastic/elasticsearch/issues/32805
问题发现:
当我用下面的查询方法进行查询的时候,发现没有结果,但是index里面是有数据的
GET app_tzn_test_service_tzn_test3_kdm_ctserver/service_tzn_test3/_search
{
"query" : {
"bool" : {
"must" : [
{
"geo_shape" : {
"locationshape" : {
"shape" : {
"type" : "polygon",
"coordinates" : [
[
[
-179,
90
],
[
180.0,
90
],
[
180.0,
-90
],
[
-179,
-90
],
[
-179,
90
]
]
]
},
"relation" : "within"
},
"boost" : 1.0
}
}
],
"disable_coord" : false,
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
}
通过网上查询相关问题发现:
Elasticsearch接受顺时针和逆时针多边形如果出现不跨越国际日期变更线(即他们跨经度的小于180°),但对于多边形,跨越国际日期变更线(或其他多边形超出180°)Elasticsearch要求顶点顺序遵循OGC和GeoJSON规范。否则,可以创建一个意想不到的多边形和意想不到的查询将返回/过滤结果。
OGC规范:GeoJSON要求外多边形必须逆时针方向和内部多边形必须是顺时针方向
上面查询的问题在于经度差大于180,所以多边形必须要逆时针,改成下面逆时针的方式,就能查询到结果。
GET app_tzn_test_service_tzn_test3_kdm_ctserver/service_tzn_test3/_search
{
"query" : {
"bool" : {
"must" : [
{
"geo_shape" : {
"locationshape" : {
"shape" : {
"type" : "polygon",
"coordinates" : [
[
[
-179,
90
],
[
-179.0,
-90
],
[
180.0,
-90
],
[
180,
90
],
[
-179,
90
]
]
]
},
"relation" : "within"
},
"boost" : 1.0
}
}
],
"disable_coord" : false,
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
}