Оптимизация Java-запросов Elasticsearch

1

У меня есть документ со следующими полями A, B, C, D, E.

Я могу запросить, чтобы получить значения A и B следующими двумя способами

Способ 1:

    SearchResponse response1 = client
            .prepareSearch("indexname")
            .setTypes("all")
            .setQuery(QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.termFilter("C", "SOME_VALUE")))
            .execute().actionGet();

Затем проанализируйте источник, чтобы получить поля A и B.

Способ 2

    String[] fields = {"A", "B"};
    SearchResponse response1 = client
            .prepareSearch("indexname")
            .setTypes("all")
            .setQuery(QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.termFilter("C", "SOME_VALUE")))
            .addFields(fields)
            .execute().actionGet();

Теперь проанализируйте сами поля непосредственно вместо источника.

Я сравнил время, затраченное на оба запроса. Результаты были непоследовательными. Однако время отклика было искажено, чтобы быть ниже к методу 2. Но это не было определенным. Так может кто-нибудь сказать мне наверняка, какой метод быстрее и почему?

Теги:
optimization
performance
elasticsearch

1 ответ

0

Для каждого результирующего документа первый метод должен извлекать значения всех полей, а второй метод должен извлекать значения полей A и B. То, что метод причины 2 быстрее. Метод 2 также более чист, так как вы получаете значения полей A и B напрямую, и вам не нужно применять логику пользовательского логического разбора на стороне клиента.

Любая причина, по которой вы включили поле _source? Разумеется, получение значения поля _source потребует дополнительного времени, не говоря уже о том, что в индексе также накладные расходы на хранение. См. Это для получения дополнительной информации. Поэтому, если это абсолютно необходимо, вы можете попробовать отключить поле _source.

  • 0
    Я новичок в ES. Итак, вы хотите сказать, что в моих сопоставлениях для индекса я должен сделать 'store: yes' и отключить _source?
  • 0
    в соответствии с этим stackoverflow.com/questions/15299799/… Если я отключу _source, будет прочитано по одному диску для каждого поля, которое я хочу получить. И _source включен дает мне все поля на одном диске для чтения. И что мне по сути нужно - это иметь возможность получить любое поле на основе определенного значения какого-либо поля. Очень похоже на базу данных.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню