Привет попробовал некоторые решения, но из-за нехватки опыта эластичного поиска я мог прийти к выводу.
Прежде всего, у меня есть индекс как это;
field1 | field2 | **status: 200, response_time: 2** (type of this row keyword)
//other rows omitted for brevity
Мой бизнесТребуется усреднение response_time секунд. Я хочу проанализировать status: 200, response_time: 2
строку и получить время с помощью регулярного выражения, а затем выполнить усреднение.
Я попробовал это так:
private RestHighLevelClient client;
public void averaging() {
SearchRequest searchRequest = new SearchRequest("index_name");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
AvgAggregationBuilder aggregation = AggregationBuilders.avg("response_time_average")
.field("doc['Message.keyword']").script(
new Script(
"def value = doc['Message.keyword']; return Integer.parseInt(value.split('regexp'))"));
searchSourceBuilder.aggregation(aggregation);
searchRequest.source(searchSourceBuilder);
try {
SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
Avg agg = search.getAggregations().get("response_time_average");
double value = agg.getValue();
//value returns as _infinity_
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
У меня недостаточно информации о жаргонизме эластичного поиска. Я перепробовал множество решений, но думаю, что это более близко к решению.
Моя версия клиентаasticservice - 7.3.1 спасибо:)