Я работаю над оптимизацией запросов на основе нет. дней, поэтому, если есть один запрос на 30 дней, мне нужно разделить этот единственный запрос на 10 дней, как для [1-10], [11-20], [21-30].
что я сделал: используя карту и RangeQueryBuilder. код для генерации запроса
if(dateRangeMap.size() > 0) {
for(Map.Entry<Integer, Integer> it : dateRangeMap.entrySet()) {
query = generateQuery(chartRequest.filters, it.getKey(), it.getValue());
и вот метод генерации запроса
static BoolQueryBuilder generateQuery(List<FilterGroup> filters, int key, int value) {
BoolQueryBuilder boolQueryBuilder = boolQuery().minimumNumberShouldMatch(1)
.should(dateRangeFilter('tracking.last_found', key, value))
.should(dateRangeFilter('tracking.last_fixed', key, value))
.should(boolQuery()
.filter(dateRangeFilter('scan.started_at', key, value))
.mustNot(existsQuery('tracking')))
generateQuery(filters).filter(boolQueryBuilder)
}
на что это похоже, он генерирует три разных запроса одновременно.
в соответствии с приведенным выше кодом первое значение ключа генерирует запрос и дает ответ, затем второе и далее,
так что я получил три ответа в списке из трех разных запросов, которые назначены в одной переменной.
Мне нужно объединить эти три ответа в один ответ, вот код, в котором я генерирую ответ для запроса.
статический список queryEsList (ElasticsearchClient esClient, String queryPath, QueryBuilder query,
Список агрегатов, String metricName, логическое addPrefix = true,
int numFilteredTGMembers = 0) {
List response = new ArrayList <> ();
String aggString = aggregations.collect {XContentHelper.toString (it) [1 ..- 2]}
.join (",")
SearchSourceBuilder search = new SearchSourceBuilder()
.size(0)
.query(query)
.aggregations("{$aggString}".bytes)
log.debug("elasticsearch_search ${queryPath}=${search}")
ElasticsearchQueryResponse res = esClient.performQuery(queryPath, search, mapTypeReference, addPrefix, metricName)
response << res
log.info("es query filtering on ${numFilteredTGMembers} target group members took ${res.took} ms ")
return response
}
Пожалуйста, дайте мне знать, что я могу сделать здесь, чтобы объединить или объединить множественные ответы в одном ответе.