我是 EL 的新手。我的要求是我需要使用 Spring Boot 通过 Java API 从 ELS 获取数据。我已经编写了搜索查询以及折叠和排序。它工作得很好。但是我正在学习如何在 java spring boot 中重新编写这段代码。你能帮帮我吗?
在我的 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);
希望我对我的问题很清楚。