Elasticsearch получает самый дешевый внутренний хит за каждый результат - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть индекс, содержащий поездки. Каждая поездка будет иметь несколько отправлений, каждая отправка будет иметь свою собственную дату отправления и набор цен (каждая с другой валютой).

Я хочу иметь возможность запросить и найти все поездки в пределах определенного диапазона дат и затем для каждой из этих поездок я хочу выделить самую дешевую цену из соответствующих отправлений.

Моя структура данных выглядит примерно так:

{
    "id": 123,
    "name": "Cool trip",
    "highlightedDeparture": {
            "startDate": "2020-02-01",
            "yearMonth": 202001,
            "prices": [
                {
                    "currencyCode": "GBP",
                    "price": 99
                }
            ]
        },
    "departures": [
        {
            "startDate": "2020-01-07",
            "yearMonth": 202001,
            "prices": [
                {
                    "currencyCode": "GBP",
                    "price": 123
                }
            ]
        },
        {
            "startDate": "2020-01-14",
            "yearMonth": 202001,
            "prices": [
                {
                    "currencyCode": "GBP",
                    "price": 456
                }
            ]
        },
        {
            "startDate": "2020-01-21",
            "yearMonth": 202001,
            "prices": [
                {
                    "currencyCode": "GBP",
                    "price": 789
                }
            ]
        },
        {
            "startDate": "2020-02-01",
            "yearMonth": 202001,
            "prices": [
                {
                    "currencyCode": "GBP",
                    "price": 99
                }
            ]
        }
    ]
}

В настоящее время, когда поездка индексируется для выделенного отправления по умолчанию задан общий самый дешевый отправления, и он предварительно рассчитывается до начала индексации.

Я хочу иметь возможность выполнить следующий запрос и каким-то образом выделить выделенное поле отправления «переопределено». самым дешевым за январь 2020 года, который будет стоить 123.

{ 
   "query":{ 
      "bool":{ 
         "must":[ 
            { 
               "nested":{ 
                  "inner_hits":{ 
                     "name":"highlightedAvailability",
                     "sort":[ 
                        { 
                           "departures.prices.price":{ 
                              "nested":{ 
                                 "filter":{ 
                                    "term":{ 
                                       "departures.prices.currencyCode":{ 
                                          "value":"GBP"
                                       }
                                    }
                                 },
                                 "path":"departures.prices"
                              },
                              "order":"asc"
                           }
                        }
                     ]
                  },
                  "path":"departures",
                  "query":{ 
                     "term":{ 
                        "departures.yearMonth":{ 
                           "value":"202001"
                        }
                     }
                  }
               }
            }
         ]
      }
   },
   "_source":{ 
      "excludes":[ 
         "departures"
      ],
      "includes":[ 
         "*"
      ]
   }
}

Мой желаемый ответ на этот запрос будет выглядеть так:

{
    "id": 123,
    "name": "Cool trip",
    "highlightedDeparture": {
        "startDate": "2020-01-07",
        "yearMonth": 202001,
        "prices": [
            {
                "currencyCode": "GBP",
                "price": 123
            }
        ]
    }
}

В настоящее время я Я достигаю этого, обрабатывая ответ elasti c и выбирая самый дешевый из внутреннего привета. ц. Это кажется неэффективным и добавляет задержку. Я хотел бы знать, возможно ли это с нативным Elasticsearch.

К вашему сведению - при необходимости можно изменить индексирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...