Elasticsearch查询geo_polygon是否在多多边形内



我正在使用弹性检查地理点是否位于多边形内。我可以让它简单地用于"多边形",但"多重多边形"不起作用。

这是有效的(多边形(:

{
"query": {
"bool" : {
"must" : {
"match_all" : {}
},
"filter" : {
"geo_polygon" : {
"geo" : {
"points" : [
[-131.602021, 55.117982],
[-131.569159, 55.28229],
[-131.355558, 55.183705],
[-131.38842, 55.01392],
[-131.645836, 55.035827],
[-131.602021, 55.117982]
]
}
}
}
}
}
}

这不是(多多边形(:

{
"query": {
"bool" : {
"must" : {
"match_all" : {}
},
"filter" : {
"geo_polygon" : {
"geo" : {
"points" : [
[
[-131.602021, 55.117982],
[-131.569159, 55.28229],
[-131.355558, 55.183705],
[-131.38842, 55.01392],
[-131.645836, 55.035827],
[-131.602021, 55.117982]
],
[
[-131.832052, 55.42469],
[-131.645836, 55.304197],
[-131.749898, 55.128935],
[-131.832052, 55.189182],
[-131.832052, 55.42469]
]
]
}
}
}
}
}
}

我的理解是,我可能需要对每个单独的多边形进行某种布尔查询——然而,任何指导都是很好的。

@Nate是对的——在geo_polygon查询中不支持多极子,但最近有一个活动的PR可以在geo_point类型上启用geo_shape查询——这将非常适合您的用例。


同时,您将不得不使用拆分多极子并使用bool-should:

{
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": {
"bool": {
"should": [
{
"geo_polygon": {
"geo": {
"points": [
[-131.602021, 55.117982],
[-131.569159, 55.28229],
[-131.355558, 55.183705],
[-131.38842, 55.01392],
[-131.645836, 55.035827],
[-131.602021, 55.117982]
]
}
}
},
{
"geo_polygon": {
"geo": {
"points": [
[-131.832052, 55.42469],
[-131.645836, 55.304197],
[-131.749898, 55.128935],
[-131.832052, 55.189182],
[-131.832052, 55.42469]
]
}
}
}
]
}
}
}
}
}

以上答案对我不起作用,我尝试了以下方法:

{
"query": {
"bool": {
"must": [
{
"bool": {
"minimum_should_match": 1,
"should": [
{
"bool": {
"must": [
{
"geo_polygon": {
"_name": "location.geo_coordinates",
"location.geo_coordinates": {
"points": []
}
}
}
]
}
},
{
"bool": {
"must": [
{
"geo_polygon": {
"_name": "location.geo_coordinates",
"location.geo_coordinates": {
"points": []
}
}
}
]
}
}
]
}
}
],
}
}
}

minimum_should_match就可以了。为了不影响其他应该查询,我将其封装到单独的bool中。

最新更新