类似SQL: select sum(field1 + field2 + field3) as sum from table order by sum
SearchRequest searchRequest = new SearchRequest(索引);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().size(10);
BoolQueryBuilder boolQueryBuilder = 这里构建查询条件
// 创建一个script来求和三个字段
Script script = new Script(
Script.DEFAULT_SCRIPT_TYPE,
Script.DEFAULT_SCRIPT_LANG,
"doc['field1'].value + doc['field2'].value + doc['field3'].value",
Collections.emptyMap()
);
// 添加script字段到source builder
ScriptSortBuilder scriptSortBuilder = new ScriptSortBuilder(script, ScriptSortBuilder.ScriptSortType.NUMBER)
.order(SortOrder.DESC);
// 添加 ScriptSortBuilder 到搜索源构建器
searchSourceBuilder.query(boolQueryBuilder)
.fetchSource(new String[]{"id", "name", "sex"}, null)
.sort(scriptSortBuilder);
searchRequest.source(searchSourceBuilder);
SearchResponse response = clinet.search(searchRequest, RequestOptions.DEFAULT);
SearchHit[] hits = response.getHits().getHits();