Я новичок в 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);
Надеюсь, мне понятен мой вопрос.