SpringBoot ES 聚合后多字段加减乘除

这篇具有很好参考价值的文章主要介绍了SpringBoot ES 聚合后多字段加减乘除。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在SpringData Elasticsearch中,聚合统计的原理主要依赖于Elasticsearch本身的聚合框架。Elasticsearch提供了强大的聚合功能,使得你可以对文档进行各种计算和统计,从而得到有关数据集的有用信息。

Elasticsearch的聚合(Aggregation)是一种强大的数据分析和统计工具,它允许你对文档集合进行多层次、多维度的计算和分析。聚合的原理可以分为以下几个方面:文章来源地址https://www.toymoban.com/news/detail-810145.html

关键词 原理
桶(Buckets) 桶是聚合的基本单元,它将文档分组到不同的集合中,这些集合称为桶。桶可以按照不同的标准进行分组,比如词条、范围、日期等。
度量(Metrics) 除了桶,聚合还可以返回一些度量结果,如总和、平均值、最大值、最小值等。度量通常与桶结合使用,以提供更详细的统计信息。
Pipeline Aggregations Elasticsearch支持通过管道(pipeline)对聚合结果进行再处理。管道聚合(Pipeline Aggregations)允许你在已经聚合的结果上进行进一步的计算,例如计算平均值、求和等。
分布式计算 Elasticsearch是一个分布式的搜索引擎,聚合的计算也是分布式的。当执行聚合查询时,Elasticsearch会将聚合任务分发到不同的分片上,然后将结果合并到一个全局结果中。
优化和缓存 为了提高性能,Elasticsearch会对聚合进行优化和缓存。在多次执行相同聚合查询时,Elasticsearch可能会缓存中间结果,以减少重复计算的开销。
脚本 Elasticsearch支持使用脚本来进行聚合计算。脚本可以在聚合过程中对文档的字段进行定制的计算,从而实现更灵活的聚合操作。
import org.elasticsearch.script.Script;
import org.elasticsearch.script.ScriptType;
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.AvgAggregationBuilder;
import org.elasticsearch.search.aggregations.metrics.MaxAggregationBuilder;
import org.elasticsearch.search.aggregations.metrics.MinAggregationBuilder;
import org.elasticsearch.search.aggregations.metrics.SumAggregationBuilder;
import org.jeecg.modules.mark.common.es.entity.AudioMarkInfo;
import org.junit.jupiter.api.Test;

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";

        NativeSearchQueryBuilder query = new NativeSearchQueryBuilder();

        TermsAggregationBuilder group = AggregationBuilders.terms("group").field("id");

        // 多字段积 聚合求 和
        Script script1 = new Script(ScriptType.INLINE, "painless",
                "doc['age'].value * doc['score'].value", Collections.emptyMap());
        SumAggregationBuilder sum = AggregationBuilders.sum("sum").script(script1);

        // 多字段差 聚合求 平均数
        Script script2 = new Script(ScriptType.INLINE, "painless",
                "doc['age'].value / doc['score'].value", Collections.emptyMap());
        AvgAggregationBuilder avg = AggregationBuilders.avg("avg").script(script2);

        // 多字段和 聚合求 最大值
        Script script3 = new Script(ScriptType.INLINE, "painless",
                "doc['age'].value + doc['score'].value", Collections.emptyMap());
        MaxAggregationBuilder max = AggregationBuilders.max("max").script(script3);

        // 多字段商 聚合求 最小值
        Script script4 = new Script(ScriptType.INLINE, "painless",
                "doc['age'].value + doc['score'].value + doc['mathScore'].value", Collections.emptyMap());
        MinAggregationBuilder min = AggregationBuilders.min("min").script(script4);

        group.subAggregation(sum);
        group.subAggregation(avg);
        group.subAggregation(max);
        group.subAggregation(min);

        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:
            }
        }

    }

}


到了这里,关于SpringBoot ES 聚合后多字段加减乘除的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言加减乘除运算

    加减乘除是常见的数学运算,C语言当然支持,不过,C语言中的运算符号与数学中的略有不同,请见下表。 加法 减法 乘法 除法 求余数(取余) 数学 + - × ÷ 无 C语言 + - * / % C语言中的加号、减号与数学中的一样,乘号、除号不同;另外C语言还多了一个求余数的运算符,就是

    2024年02月06日
    浏览(44)
  • 图像四则运算(加减乘除)

    实验目的: 1.了解图像的算术运算在数字图像处理中的初步应用。 2.体会图像算术运算处理的过程和处理前后图像的变化。 3.能够实现简单的图像处理 实验原理: 图像的代数运算包括加,减,乘,除,这些运算的主要对象是图像数据块中的数据。这四种代数运算可以由如

    2024年02月08日
    浏览(52)
  • 只使用位运算实现加减乘除

    在线OJ: LeetCode 29. 两数相除 原题目的要求是不能使用乘法, 除法和取余运算符实现除法. 在本篇博客中把题目要求提高一点, 这里只使用位运算来实现, 顺便的也就把只使用位运算实现加减乘除实现了. 首先我们需要知道两数之和可以是两个数位相加和不进位相加之和, 而两数进

    2024年02月06日
    浏览(50)
  • Rust 复数运算,重载加减乘除运算

    复数定义 由实数部分和虚数部分所组成的数,形如a+bi 。 其中a、b为实数,i 为“虚数单位”,i² = -1,即虚数单位的平方等于-1。 a、b分别叫做复数a+bi的实部和虚部。 当b=0时,a+bi=a 为实数; 当b≠0时,a+bi 又称虚数; 当b≠0、a=0时,bi 称为纯虚数。 实数和虚数都是复

    2024年02月13日
    浏览(38)
  • Python Opencv实践 - 图像的加减乘除

               

    2024年02月13日
    浏览(39)
  • Pytorch入门:Tensor加减乘除矩阵运算

    若张量维数大于2,则对最后两维进行matmul。进行此运算的要求是张量a与b除最后两维外的其他维必须一致:

    2024年02月12日
    浏览(46)
  • Java进行数字计算 BigDecimal计算(加减乘除)

    Double只能处理16位有效数精度,在某些情况下精度对其需求是不够的,所以就有了BigDecimal。因为BigDecimal的精度范围的范围大,所以在问我们的开发业务中对精度要求高的属性,就需要BigDecimal来进行存储计算,防止精度丢失。这里我主要介绍一下BigDecimal的加,减,乘,除。四

    2023年04月08日
    浏览(40)
  • 【python&flask-1】简单实现加减乘除输入界面

    app.py index.html result.html 支持小数点计算

    2024年02月09日
    浏览(40)
  • 用Vue的三种方法实现加减乘除运算

    js插件:vue.js 教程: 首先在工具内引入vue.js 然后在body里面创建一个div并设置id,我这里给id命名为\\\"app\\\" 在id命名为\\\"app\\\"的div内使用input标签和select标签来设置运算框 然后用 methods方法 computed方法 watch(侦听器)方法 做出3种不同的加减乘除运算 第一种computed方法: 接下来我们在

    2024年02月09日
    浏览(121)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包