Динамические термины - PullRequest
       2

Динамические термины

0 голосов
/ 06 февраля 2019

Мне нужно иметь возможность собирать данные на лету на основе нескольких значений в поле в индексе.

Например - если мой индекс содержал тип ключевого слова моделей автомобилей (известный конечный список) ицену автомобиля, я хотел бы агрегировать на основе типа автомобиля, чтобы получить количество автомобилей для модели и сумму цен.Я знаю, что лучше всего сохранить информацию о модели автомобиля в самом индексе, но на данный момент это не вариант.

Я хотел бы иметь следующую группировку:

minivan
   odyssey, sienna, caravan
sedan
   corolla, accord, regal
suv
   rav4, rogue, crv
other
   pinto

и вывести результат, например:

minivan - num 2,010, price 80,000,000
sedan - num 2,001, price 70,000,000
suv - num 2,010, price 60,000,000
other - num 2,100, price 75,000,000

Я нашел способ сделать это с помощью Java с субагрегациями - что кажется очень неоптимальным.Есть ли другой способ сделать это?

GlobalAggregationBuilder topValues = AggregationBuilders.global("carmodels");
List<String> other = new ArrayList<>();
for (Map.Entry<String, List<String>> mappings : cars.entrySet()) {
    List<String> carmodels = mappings.getValue();
    other.addAll(carmodels);
    String[] includes = carmodels.toArray(new String[carmodels.size()]);
    topValues.subAggregation(AggregationBuilders.terms(mappings.getKey())
        .field("carmodel")
        .includeExclude(new IncludeExclude(includes, /*excludeValues*/ null)));
}
topValues.subAggregation(AggregationBuilders.terms("Other")
    .field("carmodel")
    .includeExclude(new IncludeExclude(/*includeValues*/ null, excludes.toArray(new String[excludes.size()]))));

Спасибо за вашу помощь / совет.

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