2015-07-16 3 views
4

Я хотел бы сопоставить любой документ в индексе ES, где точка находится внутри типа geog_shape документа polygon.Сопоставьте документ GeoShape/Polygon с запросом GeoPoint в ElasticSearch

Итак, я хотел бы запросить точку (т.е. [2.934211, 42.522377]) и получить соответствие со всеми документами, где многоугольник пересекается с этой точкой.

Вот мое простое отображение ES:

{"geometry":{"type":"geo_shape","tree":"quadtree","precision":"1m"}} 

А вот индексированный документ:

{ 
"geometry": { 
"type": "polygon", 
"coordinates": [ 
    [ 
     [ 
      2.9109533049198 
      , 
      42.525105483878 
     ] 
     , 
     [ 
      2.9110769445829 
      , 
      42.531703894436 
     ] 
     , 
     [ 
      2.9032846986744 
      , 
      42.539733810015 
     ] 
     , 
     [ 
      2.9030996511561 
      , 
      42.556013979376 
     ] 
     , 
     [ 
      2.9131331966995 
      , 
      42.562962734203 
     ] 
     , 
     [ 
      2.9135244444206 
      , 
      42.569759384018 
     ] 
     , 
     [ 
      2.917877044124 
      , 
      42.57088655519 
     ] 
     , 
     [ 
      2.9319395143989 
      , 
      42.568900684816 
     ] 
     , 
     [ 
      2.9403405122874 
      , 
      42.572016209123 
     ] 
     , 
     [ 
      2.9363870185385 
      , 
      42.561333977005 
     ] 
     , 
     [ 
      2.9309712722105 
      , 
      42.534037916636 
     ] 
     , 
     [ 
      2.9109533049198 
      , 
      42.525105483878 
     ] 
    ] 
] 
} 

Когда я ищу в моем индексе и типа с geo_shape фильтром типа, что:

{ 
    "query": { 
    "match_all": {} 
    }, 
    "filter": { 
    "geo_shape": { 
     "geometry": { 
    "relation": "intersects", 
    "shape": { 
     "coordinates": [ 
     2.934211, 
     42.522377 
     ], 
     "type": "point" 
    } 
     } 
    } 
    } 
} 

У меня нет никаких результатов:

{ 

    "took": 3, 
    "timed_out": false, 
    "_shards": { 
    "total": 5, 
    "successful": 5, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 0, 
    "max_score": null, 
    "hits": [ ] 
    } 

} 

Любая идея о том, что мне не хватает? Я пробовал с «внутри» в отношении без успеха.

Спасибо, DJP

+0

хороший пример. спасибо –

ответ

5

Ваша точка не находится внутри вашего полигона!

Google Maps

+0

Oups, omg! Ты прав !! : x Большое спасибо. – DJP

0

Запрос не работает. Я поправил:

запроса для отображения (тип = DOC):

{ 
"mappings": { 
    "doc": { 
     "properties": { 
      "geometry": { 
       "type": "geo_shape","tree":"quadtree","precision":"1m" 
      } 
     } 
    } 
} 
} 
0

запрос для поиска

{ 
"query": { 
"bool": { 
    "must": { 
    "match_all": { 

    } 
    }, 
    "filter": { 
    "geo_shape": { 
     "geometry": { 
     "shape": { 
      "coordinates": [ 
      2.934211, 
      42.522377 
      ], 
      "type": "point" 
     }, 
     "relation": "disjoint" 
     } 
    } 
    } 
} 
} 
} 
Смежные вопросы