从零开发短视频电商 OpenSearch/Elasticsearch 聚合操作

2023-12-18 23:15

本文主要是介绍从零开发短视频电商 OpenSearch/Elasticsearch 聚合操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 文本字段上的聚合
  • 通用聚合结构
  • 嵌套聚合
  • 聚合类型
    • 指标聚合
      • 平均值/求和等
      • 基数
      • 百分位
      • 统计汇总
      • 热门点击
      • 值计数
    • 桶聚合
      • 日期直方图
      • 直方图
      • 范围聚合
      • 词语聚合

OpenSearch不仅仅是用于搜索的工具。聚合使您能够利用OpenSearch强大的分析引擎分析数据并从中提取统计信息。

聚合的用例各异,从实时分析数据以采取某些行动,到使用OpenSearch仪表板创建可视化仪表板。

OpenSearch可以在毫秒内对大规模数据集执行聚合。与查询相比,聚合消耗更多的CPU周期和内存。

先来个总结表格

聚合类型ElasticsearchSQL
指标聚合(Metric Aggregations)
平均值(Average)avgSELECT AVG(column) FROM table;
基数(Cardinality)cardinalitySELECT COUNT(DISTINCT column) FROM table;
扩展统计(Extended Stats)extended_statsSELECT AVG(column), MIN(column), MAX(column), COUNT(column) FROM table;
地理边界(Geobounds)geobounds无SQL对应,用于地理坐标范围的统计。
矩阵统计(Matrix Stats)matrix_stats无SQL对应,用于多值字段的统计。
最大值(Maximum)maxSELECT MAX(column) FROM table;
最小值(Minimum)minSELECT MIN(column) FROM table;
百分位排名(Percentile Ranks)percentiles_rankSELECT PERCENTILE_CONT(percentage) WITHIN GROUP (ORDER BY column) FROM table;
百分位(Percentile)percentilesSELECT PERCENTILE_CONT(percentage) WITHIN GROUP (ORDER BY column) FROM table;
脚本度量(Scripted Metric)scripted_metric无SQL对应,通过自定义脚本计算度量。
统计信息(Stats)statsSELECT AVG(column), MIN(column), MAX(column), COUNT(column), SUM(column) FROM table;
求和(Sum)sumSELECT SUM(column) FROM table;
前N条记录(Top Hits)top_hits无SQL对应,返回每个桶中排序后的前N条记录。
值计数(Value Count)value_countSELECT COUNT(column) FROM table;
桶聚合(Bucket Aggregations)ElasticsearchSQL
邻接矩阵(Adjacency Matrix)adjacency_matrix无SQL对应,用于关系型数据的统计。
日期直方图(Date Histogram)date_histogramSELECT COUNT(column), DATE_TRUNC('interval', date_column) FROM table GROUP BY DATE_TRUNC('interval', date_column);
日期范围(Date Range)date_rangeSELECT COUNT(column) FROM table WHERE date_column BETWEEN start_date AND end_date;
多样化采样(Diversified Sampler)diversified_sampler无SQL对应,用于多样本的统计。
过滤器(Filter)filterSELECT COUNT(column) FROM table WHERE condition;
多过滤器(Filters)filters无SQL对应,用于同时应用多个过滤器的统计。
地理距离(Geodistance)geodistance无SQL对应,用于地理坐标距离的统计。
地理哈希网格(Geohash Grid)geohash_grid无SQL对应,用于地理坐标哈希网格的统计。
地理六边形网格(Geohex Grid)geohex_grid无SQL对应,用于地理坐标六边形网格的统计。
地理瓦片网格(Geotile Grid)geotile_grid无SQL对应,用于地理坐标瓦片网格的统计。
全局(Global)global无SQL对应,用于对整个数据集执行聚合而不分组。
直方图(Histogram)histogramSELECT COUNT(column), FLOOR(column/interval)*interval as range FROM table GROUP BY range;
IP范围(IP Range)ip_range无SQL对应,用于IP地址范围的统计。
缺失值(Missing)missingSELECT COUNT(column) FROM table WHERE column IS NULL;
多词项(Multi-terms)multi_terms无SQL对应,用于多个词项的统计。
嵌套(Nested)nested无SQL对应,用于嵌套文档的统计。
范围(Range)rangeSELECT COUNT(column) FROM table WHERE column BETWEEN min AND max;
反向嵌套(Reverse Nested)reverse_nested无SQL对应,用于反向嵌套文档的统计。
采样器(Sampler)sampler无SQL对应,用于对样本进行统计。
显著项(Significant Terms)significant_terms无SQL对应,用于显著项的统计。
显著文本(Significant Text)significant_text无SQL对应,用于显著文本的统计。
词项(Terms)termsSELECT COUNT(column) FROM table GROUP BY column;

文本字段上的聚合

默认情况下,OpenSearch不支持在文本字段上进行聚合。因为文本字段被标记化,对文本字段的聚合必须将标记化过程反转回其原始字符串,然后基于此进行聚合。这种操作消耗大量内存并降低集群性能。

虽然您可以通过在映射中将 fielddata 参数设置为 true 来启用文本字段的聚合,但聚合仍然基于标记化单词而不是原始文本。

我们建议将文本字段的原始版本保留为可聚合的 keyword 字段。

在这种情况下,您可以对 title.raw 字段而不是 title 字段执行聚合:

PUT movies
{"mappings": {"properties": {"title": {"type": "text","fielddata": true,"fields": {"raw": {"type": "keyword"}}}}}
}

通用聚合结构

聚合查询的结构如下:

GET _search
{"size": 0,"aggs": {"NAME": {"AGG_TYPE": {}}}
}

如果您只对聚合结果感兴趣而不对查询结果感兴趣,请将 size 设置为 0。

aggs 属性中(如果需要,可以使用 aggregations ),您可以定义任意数量的聚合。每个聚合均由其名称和 OpenSearch 支持的聚合类型之一定义。

聚合的名称可帮助您区分响应中的不同聚合。 AGG_TYPE 属性是您指定聚合类型的位置。

嵌套聚合

聚合内的聚合称为嵌套聚合或子聚合。

指标聚合产生简单的结果,并且不能包含嵌套聚合。

存储桶聚合生成可以嵌套在其他聚合中的文档存储桶。您可以通过在存储桶聚合中嵌套指标和存储桶聚合来对数据执行复杂的分析。

通用嵌套聚合语法

{"aggs": {"name": {"type": {"data"},"aggs": {"nested": {"type": {"data"}}}}}
}

内部 aggs 关键字开始新的嵌套聚合。父聚合和嵌套聚合的语法相同。嵌套聚合在前面的父聚合的上下文中运行。

您还可以将聚合与搜索查询配对,以缩小聚合之前尝试分析的范围。如果您不添加查询,OpenSearch 会隐式使用 match_all 查询。

由于聚合器对所有值都使用 double 数据类型进行处理,因此 2 53 及更大的 long 值是近似值。

聚合类型

聚合主要分为三种类型:

  • 指标聚合 - 计算数字字段上的指标,例如 summinmaxavg
  • 桶聚合 - 根据某些标准对查询结果进行分组。
  • 管道聚合 - 将一个聚合的输出作为另一个聚合的输入。

指标聚合

指标聚合可让您执行简单的计算,例如查找字段的最小值、最大值和平均值。

度量聚合有两种类型:单值度量聚合和多值度量聚合。

  • 单值指标聚合返回单个指标,例如 summinmaxavgcardinality
  • 多值指标聚合返回多个指标。这些包括 statsextended_statsmatrix_statspercentilepercentile_ranksgeo_boundtop_hitsscripted_metric

平均值/求和等

要查找 taxful_total_price 字段的平均值:

GET opensearch_dashboards_sample_data_ecommerce/_search
{"size": 0,"aggs": {"avg_taxful_total_price": { // 这个名字可以随意定义"avg": {  // 求平均值"field": "taxful_total_price" // 在taxful_total_price字段上 操作}}}
}

响应示例

{"took" : 1,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 4675,"relation" : "eq"},"max_score" : null,"hits" : [ ]},"aggregations" : {"avg_taxful_total_price" : { // 呼应前面定义的名称"value" : 75.05542864304813}}
}

基数

cardinality 指标是单值指标聚合,用于计算字段的唯一或不同值的数量。

GET opensearch_dashboards_sample_data_ecommerce/_search
{"size": 0,"aggs": {"unique_products": {"cardinality": {"field": "products.product_id"}}}
}..."aggregations" : {"unique_products" : {"value" : 7033}}
}

基数计数是近似值。如果您的假设商店中有数万种产品,则准确的基数计算需要将所有值加载到哈希集中并返回其大小。这种方法的扩展性不好;它需要大量内存并可能导致高延迟。

您可以使用 precision_threshold 设置来控制内存和准确性之间的权衡。此设置定义阈值,低于该阈值计数预计接近准确。高于此值,计数可能会变得不太准确。 precision_threshold 的默认值为 3,000。支持的最大值为 40,000。

GET opensearch_dashboards_sample_data_ecommerce/_search
{"size": 0,"aggs": {"unique_products": {"cardinality": {"field": "products.product_id","precision_threshold": 10000}}}
}

百分位

GET opensearch_dashboards_sample_data_ecommerce/_search
{"size": 0,"aggs": {"percentile_taxful_total_price": {"percentiles": {"field": "taxful_total_price"}}}
}
...
"aggregations" : {"percentile_taxful_total_price" : {"values" : {"1.0" : 21.984375,"5.0" : 27.984375,"25.0" : 44.96875,"50.0" : 64.22061688311689,"75.0" : 93.0,"95.0" : 156.0,"99.0" : 222.0}}}
}

统计汇总

stats 指标是一个多值指标聚合,它返回所有基本指标,例如 minmaxsumavgvalue_count 在一个聚合查询中。

GET opensearch_dashboards_sample_data_ecommerce/_search
{"size": 0,"aggs": {"stats_taxful_total_price": {"stats": {"field": "taxful_total_price"}}}
}
...
"aggregations" : {"stats_taxful_total_price" : {"count" : 4675,"min" : 6.98828125,"max" : 2250.0,"avg" : 75.05542864304813,"sum" : 350884.12890625}}
}

热门点击

top_hits 指标是一种多值指标聚合,它根据正在聚合的字段的相关性得分对匹配文档进行排名。

from :命中的起始位置。

size :返回的最大命中数。默认值为 3。

sort :匹配的命中如何排序。默认情况下,命中按聚合查询的相关性分数排序。

以下示例返回电子商务数据中排名前 5 的产品:

GET opensearch_dashboards_sample_data_ecommerce/_search
{"size": 0,"aggs": {"top_hits_products": {"top_hits": {"size": 5}}}
}
...
"aggregations" : {"top_hits_products" : {"hits" : {"total" : {"value" : 4675,"relation" : "eq"},"max_score" : 1.0,"hits" : [{"_index" : "opensearch_dashboards_sample_data_ecommerce","_type" : "_doc","_id" : "glMlwXcBQVLeQPrkHPtI","_score" : 1.0,"_source" : {"category" : ["Women's Accessories","Women's Clothing"],"currency" : "EUR","customer_first_name" : "rania","customer_full_name" : "rania Evans","customer_gender" : "FEMALE","customer_id" : 24,"customer_last_name" : "Evans","customer_phone" : "","day_of_week" : "Sunday","day_of_week_i" : 6,"email" : "rania@evans-family.zzz","manufacturer" : ["Tigress Enterprises"],"order_date" : "2021-02-28T14:16:48+00:00","order_id" : 583581,"products" : [{"base_price" : 10.99,"discount_percentage" : 0,"quantity" : 1,"manufacturer" : "Tigress Enterprises","tax_amount" : 0,"product_id" : 19024,"category" : "Women's Accessories","sku" : "ZO0082400824","taxless_price" : 10.99,"unit_discount_amount" : 0,"min_price" : 5.17,"_id" : "sold_product_583581_19024","discount_amount" : 0,"created_on" : "2016-12-25T14:16:48+00:00","product_name" : "Snood - white/grey/peach","price" : 10.99,"taxful_price" : 10.99,"base_unit_price" : 10.99},{"base_price" : 32.99,"discount_percentage" : 0,"quantity" : 1,"manufacturer" : "Tigress Enterprises","tax_amount" : 0,"product_id" : 19260,"category" : "Women's Clothing","sku" : "ZO0071900719","taxless_price" : 32.99,"unit_discount_amount" : 0,"min_price" : 17.15,"_id" : "sold_product_583581_19260","discount_amount" : 0,"created_on" : "2016-12-25T14:16:48+00:00","product_name" : "Cardigan - grey","price" : 32.99,"taxful_price" : 32.99,"base_unit_price" : 32.99}],"sku" : ["ZO0082400824","ZO0071900719"],"taxful_total_price" : 43.98,"taxless_total_price" : 43.98,"total_quantity" : 2,"total_unique_products" : 2,"type" : "order","user" : "rani","geoip" : {"country_iso_code" : "EG","location" : {"lon" : 31.3,"lat" : 30.1},"region_name" : "Cairo Governorate","continent_name" : "Africa","city_name" : "Cairo"},"event" : {"dataset" : "sample_ecommerce"}}...}]}}}
}

值计数

value_count 指标是单值指标聚合,用于计算聚合所基于的值的数量。

GET opensearch_dashboards_sample_data_ecommerce/_search
{"size": 0,"aggs": {"number_of_values": {"value_count": {"field": "taxful_total_price"}}}
}..."aggregations" : {"number_of_values" : {"value" : 4675}}
}

桶聚合

存储桶聚合将文档集分类为存储桶。存储桶聚合的类型决定了给定文档的存储桶。

日期直方图

date_histogram聚合使用日期数学来生成时间序列数据的直方图。

网站每月获得的点击次数

GET opensearch_dashboards_sample_data_logs/_search
{"size": 0,"aggs": {"logs_per_month": {"date_histogram": {"field": "@timestamp","interval": "month"}}}
}...
"aggregations" : {"logs_per_month" : {"buckets" : [{"key_as_string" : "2020-10-01T00:00:00.000Z","key" : 1601510400000,"doc_count" : 1635},{"key_as_string" : "2020-11-01T00:00:00.000Z","key" : 1604188800000,"doc_count" : 6844},{"key_as_string" : "2020-12-01T00:00:00.000Z","key" : 1606780800000,"doc_count" : 5595}]}
}
}

直方图

histogram 聚合根据指定的时间间隔存储文档。

通过 histogram 聚合,您可以非常轻松地可视化给定文档范围内的值的分布。当然,现在 OpenSearch 不会返回实际的图表,这就是 OpenSearch 仪表板的用途。但它会给你 JSON 响应,你可以用它来构建你自己的图表。

以下示例按 10,000 个间隔对 number_of_bytes 字段进行存储:

GET opensearch_dashboards_sample_data_logs/_search
{"size": 0,"aggs": {"number_of_bytes": {"histogram": {"field": "bytes","interval": 10000}}}
}...
"aggregations" : {"number_of_bytes" : {"buckets" : [{"key" : 0.0,"doc_count" : 13372},{"key" : 10000.0,"doc_count" : 702}]}}
}

范围聚合

range 聚合允许您定义每个存储桶的范围。

例如,您可以查找 1000 到 2000、2000 到 3000、3000 到 4000 之间的字节数。在 range 参数中,您可以将范围定义为数组对象。

GET opensearch_dashboards_sample_data_logs/_search
{"size": 0,"aggs": {"number_of_bytes_distribution": {"range": {"field": "bytes","ranges": [{"from": 1000,"to": 2000},{"from": 2000,"to": 3000},{"from": 3000,"to": 4000}]}}}
}...
"aggregations" : {"number_of_bytes_distribution" : {"buckets" : [{"key" : "1000.0-2000.0","from" : 1000.0,"to" : 2000.0,"doc_count" : 805},{"key" : "2000.0-3000.0","from" : 2000.0,"to" : 3000.0,"doc_count" : 1369},{"key" : "3000.0-4000.0","from" : 3000.0,"to" : 4000.0,"doc_count" : 1422}]}}
}

词语聚合

terms 聚合动态地为字段的每个唯一术语创建一个存储桶。

以下示例使用 terms 聚合来查找 Web 日志数据中每个响应代码的文档数:

GET opensearch_dashboards_sample_data_logs/_search
{"size": 0,"aggs": {"response_codes": {"terms": {"field": "response.keyword","size": 10}}}
}...
"aggregations" : {"response_codes" : {"doc_count_error_upper_bound" : 0,"sum_other_doc_count" : 0,"buckets" : [{"key" : "200","doc_count" : 12832},{"key" : "404","doc_count" : 801},{"key" : "503","doc_count" : 441}]}}
}

这篇关于从零开发短视频电商 OpenSearch/Elasticsearch 聚合操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/510101

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。