У меня есть документ со следующими полями 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. Но это не было определенным. Так может кто-нибудь сказать мне наверняка, какой метод быстрее и почему?
Для каждого результирующего документа первый метод должен извлекать значения всех полей, а второй метод должен извлекать значения полей A и B. То, что метод причины 2 быстрее. Метод 2 также более чист, так как вы получаете значения полей A и B напрямую, и вам не нужно применять логику пользовательского логического разбора на стороне клиента.
Любая причина, по которой вы включили поле _source
? Разумеется, получение значения поля _source
потребует дополнительного времени, не говоря уже о том, что в индексе также накладные расходы на хранение. См. Это для получения дополнительной информации. Поэтому, если это абсолютно необходимо, вы можете попробовать отключить поле _source
.