Свернуть и отсортировать Elasticsearch с помощью java API - PullRequest
0 голосов
/ 30 апреля 2020

Я новичок в EL. Мое требование: мне нужно получить данные из ELS через Java API с помощью весенней загрузки. Я написал поисковый запрос вместе с коллапсом и сортировкой. Работает отлично. Но я понимаю, как переписать этот код при java весенней загрузке. Не могли бы вы помочь мне.

Ниже моего запроса ELS:

GET /test/_search
{
  "query": {
    "function_score": {
      "query": {
        "constant_score": {
          "filter": {
            "bool": {
              "must": [
                {
              "match" : {
              "job_status" : "SUCCESS"
              }
              },
                {
                  "range": {
                    "input_count": {
                      "gte": 0
                    }
                  }
                },
                {
                  "range": {
                    "output_count": {
                      "gte": 0
                    }
                  }
                },
                {
                  "range": {
                    "@timestamp": {
                      "from" : "20/04/2020",
                     "to" : "26/04/2020",
                      "format" : "dd/MM/yyyy"
                    }
                  }
                },
                {
                  "script": {
                    "script": {
                      "source": "doc['output_count'].value < doc['input_count'].value",
                      "params": {}
                    }
                  }
                }
              ]
            }
          }
        }
      }
    }
  },
   "collapse": {
    "field": "run_id.keyword"
  },
  "sort": [
    {
      "@timestamp": {
        "order": "desc"
      }
    }
  ]
}

Это мой Java код : он работает хорошо. Здесь мне нужна ваша помощь, чтобы добавить код сворачивания и сортировки API.

    MultiSearchRequest multiRequest = new MultiSearchRequest();
    SearchRequest rowCountMatchRequest = new SearchRequest();
    SearchSourceBuilder rowCountMatchSearchSourceBuilder = new SearchSourceBuilder();
    MultiSearchResponse response = null;
        BoolQueryBuilder rowCountMatchQuery = QueryBuilders.boolQuery()
                .must(QueryBuilders.matchQuery("job_status", Constants.SUCCESS))
                .must(QueryBuilders.rangeQuery("input_record_count").gte(0))
                .must(QueryBuilders.rangeQuery("output_record_count").gte(0))
                .must(QueryBuilders.rangeQuery("@timestamp").format("dd/MM/yyyy").gte(fromDate).lte(toDate))
                .must(QueryBuilders.scriptQuery(
                        new Script("doc['output_count'].value >= doc['input_count'].value")));         

        rowCountMatchSearchSourceBuilder.query(rowCountMatchQuery);
        rowCountMatchRequest.indices(stblstreamsetindex);
        rowCountMatchRequest.source(rowCountMatchSearchSourceBuilder);
        multiRequest.add(rowCountMatchRequest);
        response = restHighLevelClient.msearch(multiRequest, RequestOptions.DEFAULT);

Надеюсь, мне понятен мой вопрос.

1 Ответ

0 голосов
/ 05 мая 2020

Просто добавьте SortBuilder в SearchSourceBuilder:

rowCountMatchSearchSourceBuilder.sort(SortBuilders.fieldSort("@timestamp").order(SortOrder.DESC));

Для «свертывания» это может работать так:

rowCountMatchSearchSourceBuilder.collapse(new CollapseBuilder("run_id.keyword"));
...