Spring Boot和Elasticsearch的集成主要涉及使用Spring Data Elasticsearch庫。Elasticsearch是一個分布式搜索引擎,它提供了豐富的RESTful API,用于索引、搜索和分析大量數(shù)據(jù)。
在Spring Boot中,你可以使用Spring Data Elasticsearch來簡化與Elasticsearch的交互。Spring Data Elasticsearch提供了對Elasticsearch的高級查詢、聚合和其他操作的支持。
聚合(Aggregation): 聚合是一種在Elasticsearch中進(jìn)行數(shù)據(jù)分析的方式。它允許你對數(shù)據(jù)集執(zhí)行各種統(tǒng)計、計算和分析操作。聚合框架支持的一些常見聚合類型包括:
BucketAggregations: 將文檔分配到不同的"桶"中,類似于SQL中的GROUP BY。常見的桶聚合包括terms、date histogram等。
MetricAggregations: 計算文檔字段的度量值,如求和、平均值、最大值、最小值等。
PipelineAggregations: 允許你在其他聚合的結(jié)果上執(zhí)行進(jìn)一步的操作,類似于數(shù)據(jù)流管道。文章來源:http://www.zghlxwxcb.cn/news/detail-818788.html
Spring Data Elasticsearch中的聚合支持: Spring Data Elasticsearch通過ElasticsearchTemplate或ElasticsearchRepository接口提供對Elasticsearch聚合的支持。你可以使用NativeSearchQueryBuilder構(gòu)建查詢,然后使用addAggregation方法添加各種聚合。文章來源地址http://www.zghlxwxcb.cn/news/detail-818788.html
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.Aggregations;
import org.elasticsearch.search.aggregations.bucket.terms.ParsedStringTerms;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.elasticsearch.search.aggregations.metrics.ValueCountAggregationBuilder;
import org.elasticsearch.search.aggregations.pipeline.BucketHelpers;
import org.elasticsearch.search.aggregations.pipeline.BucketSortPipelineAggregationBuilder;
import org.elasticsearch.search.sort.FieldSortBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.jeecg.modules.mark.common.es.entity.AudioMarkInfo;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
@SpringBootTest
public class ElasticSearchTest {
@Autowired
private ElasticsearchRestTemplate restTemplate;
@Test
public void count() {
String indexName = "app_student_1";
List<String> ids = new ArrayList<>();
ids.add("1");
ids.add("2");
NativeSearchQueryBuilder query = new NativeSearchQueryBuilder();
query.withQuery(QueryBuilders.termsQuery("id", ids));
TermsAggregationBuilder group = AggregationBuilders.terms("group").field("id");
// 計數(shù)
ValueCountAggregationBuilder counts = AggregationBuilders.count("count").field("id");
group.subAggregation(counts);
// 統(tǒng)計字段排序
group.subAggregation(new BucketSortPipelineAggregationBuilder("orderType",
Collections.singletonList(new FieldSortBuilder("count").order(SortOrder.DESC)))
.gapPolicy(BucketHelpers.GapPolicy.INSERT_ZEROS));
SearchHits<AudioMarkInfo> search = restTemplate.search(query.build(), AudioMarkInfo.class,
IndexCoordinates.of(indexName));
Aggregations aggregations = search.getAggregations();
ParsedStringTerms terms = aggregations.get("group");
List<? extends Terms.Bucket> buckets = terms.getBuckets();
for (Terms.Bucket bucket : buckets) {
String id = bucket.getKeyAsString();
long count = bucket.getDocCount();
for (Aggregation list : bucket.getAggregations().asList()) {
// TODO:
}
}
}
}
到了這里,關(guān)于SpringBoot ElasticSearch 聚合排序的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!