在Elasticsearch中,可以使用terms aggregation对术语进行聚合,并使用order参数对结果进行排序。以下是一个示例代码:
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.Strings;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;
public class TermAggregationSortExample {
public static void main(String[] args) throws IOException {
// 创建Elasticsearch的RestHighLevelClient
RestHighLevelClient client = new RestHighLevelClient();
// 构建查询请求
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchAllQuery());
sourceBuilder.size(0); // 不需要返回实际的搜索结果,只需要聚合结果
sourceBuilder.aggregation(
AggregationBuilders.terms("term_agg")
.field("your_field_name")
.order(Terms.Order.term(true)) // 按照术语的升序排序
);
// 执行搜索请求
SearchResponse response = client.search(sourceBuilder);
// 解析聚合结果
Terms termAgg = response.getAggregations().get("term_agg");
for (Terms.Bucket bucket : termAgg.getBuckets()) {
String term = Strings.toString(bucket.getKey());
long count = bucket.getDocCount();
System.out.println("Term: " + term + ", Count: " + count);
}
// 关闭Elasticsearch的RestHighLevelClient
client.close();
}
}
在上面的示例代码中,我们使用AggregationBuilders.terms
创建了一个terms aggregation,并使用.field("your_field_name")
指定了要聚合的字段名。然后使用.order(Terms.Order.term(true))
指定了按术语升序排序。最后,通过调用response.getAggregations().get("term_agg")
获取到terms aggregation的结果,然后可以遍历每个bucket获取术语和对应的文档计数。