У меня есть 2 индекса, один из которых хранит данные о событии, а другой - о доступности этого события. Я пытаюсь создать один запрос, который получает события по запросу, но возвращает только те из них, которые доступны, и мне трудно это делать.
В индексе событий хранятся
{
"id" : "152ce52d-e975-4ebd-849a-0a12f535e644",
"createdAt" : 1.5519999143126902E12,
"description" : "A very not so concise description",
"geoHash" : "dnh00x6x5",
"name" : "a name",
...etc...
}
Индекс доступности сохраняет доступность следующим образом:
{
"eventId" : "152ce52d-e975-4ebd-849a-0a12f535e644",
"maxGuests" : 8,
"availability" : {
"lte" : "2019-10-18T22:15:00.000Z",
"gte" : "2019-10-18T02:30:00.000Z"
}
}
Я пытаюсь создать запрос, как показано ниже, но я не могу понять, как фильтровать по спискам, которые соответствуют критериям в индексе событий И доступно в индексе доступности.
GET events,availability/_search
{
"size": 5,
"from": 0,
"_source": [
"id"
],
"query": {
"bool": {
"must": [
{
"geo_distance": {
"distance": "25mi",
"geoHash": {
"lat": 34.0389,
"lon": -84.3826
}
}
}
],
"should": [],
"filter":[
{
"range" : {
"availability" : {
"gte" : "2019-10-31",
"lte" : "2020-11-01",
"relation" : "within"
}
}
}
]
}
}
}
-
Причина, по которой я хочу сделать только один запрос, заключается в том, что клиент ожидает определенное указанное число событий. Если я отфильтрую недоступные события после того, как получу данные о событиях, то, скорее всего, у меня останется меньше событий, чем ожидал клиент, и мне потребуется еще один поиск, чтобы заполнить пробел.
Также, конечно, Я мог бы объединить два индекса, чтобы событие также сохраняло информацию о доступности, но я изначально настроил их таким образом, потому что информация о доступности может иметь сотни или тысячи записей на событие.