Как я могу использовать среднюю агрегацию для поля с ключевыми словами вasticsearch - PullRequest
1 голос
/ 22 октября 2019

Привет попробовал некоторые решения, но из-за нехватки опыта эластичного поиска я мог прийти к выводу.

Прежде всего, у меня есть индекс как это;

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 спасибо:)

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