Мне не удалось решить эту проблему с помощью одного запроса, но я нашел обходной путь.
Я создал дополнительный индекс, содержащий только области и их границы, а второй индекс содержит толькоидентификаторы.Поэтому мне нужно сделать два запроса: один для выборки, соответствующей моим критериям, а другой для получения основных документов.
Это дало мне гибкость при написании более сложных запросов, и в качестве бонуса я не дублирую многоугольники, которые в некоторых случаях могут быть очень большими, в результате чего мой индекс в мгновение ока вырастет за несколько ГБ.
Области выборки первого запроса (это будет соответствовать районам или целым городам, поэтому я использую содержимое или внутри):
{
"query":{
"bool":{
"should":[
{
"geo_shape":{
"boundary":{
"shape":{
"type":"envelope",
"coordinates":[
[
20.5992053,
52.1227965
],
[
20.6671965,
52.0876378
]
]
},
"relation":"contains"
}
}
},
{
"geo_shape":{
"boundary":{
"shape":{
"type":"envelope",
"coordinates":[
[
20.5992053,
52.1227965
],
[
20.6671965,
52.0876378
]
]
},
"relation":"within"
}
}
}
],
"minimum_should_match":1
}
}
}
Второй запрос выборки основных документов:
{
"query":{
"bool":{
"filter":[
{
"terms":{
"areas":[9, 6]
}
}
]
}
}
}