Предположим, у меня есть следующее отображение:
"mappings": {
"doc": {
"properties": {
"name": {
"type": "text"
},
"location": {
"type": "nested",
"properties": {
"point": {
"type": "geo_shape"
}
}
}
}
}
}
}
В индексе есть один документ:
POST /example/doc?refresh
{
"name": "Wind & Wetter, Berlin, Germany",
"location": {
"type": "point",
"coordinates": [13.400544, 52.530286]
}
}
Как сделать вложенный запрос гео-формы?
Пример обычного запроса гео-формы из документации (блок "bool" можно пропустить):
{
"query":{
"bool": {
"must": {
"match_all": {}
},
"filter": {
"geo_shape": {
"location": {
"shape": {
"type": "envelope",
"coordinates" : [[13.0, 53.0], [14.0, 52.0]]
},
"relation": "within"
}
}
}
}
}
}
Пример вложенного запроса:
{
"query": {
"nested" : {
"path" : "obj1",
"score_mode" : "avg",
"query" : {
"bool" : {
"must" : [
{ "match" : {"obj1.name" : "blue"} },
{ "range" : {"obj1.count" : {"gt" : 5}} }
]
}
}
}
}
}
Теперь, как их объединить? В документации упоминается, что вложенный фильтр был заменен вложенным запросом. И что он ведет себя как запрос в «контексте запроса» и как фильтр в «контексте фильтра».
Если я попробую запросить пересечение с точкой:
{
"query": {
"nested": {
"path": "location",
"query": {
"geo_shape": {
"location.point": {
"shape": {
"type": "point",
"coordinates": [
13.400544,
52.530286
]
},
"relation": "disjoint"
}
}
}
}
}
}
Я по-прежнему получаю обратно документ, даже если отношение "не пересекается", поэтому оно неверно. Я пробовал разные комбинации, с "bool" и "filter" и т. Д., Но запрос игнорируется, возвращая весь индекс. Может быть, это невозможно с этим типом картирования?
Очевидно, я что-то здесь упускаю. Может кто-нибудь помочь мне с этим, пожалуйста? Любая помощь с благодарностью.