探索数据的力量:Elasticsearch中指定链表字段的统计查询记录

探索数据的力量:Elasticsearch中指定链表字段的统计查询记录

目录

一、基本的数据结构说明

二、基本的统计记录

(一)统计当前索引中sellingProducts的所有类型

(二)检索指定文档中sellingProducts的数据总量

(三)检索指定文档中sellingProducts指定类型的数量统计

(四)统计所有文档中sellingProducts中所有元素的总数

(五)统计所有文档中sellingProducts中详细分类总数统计

三、总结


干货分享,感谢您的阅读!

在当今数据驱动的时代,企业和组织面临着海量数据的挑战,如何有效地提取和分析这些数据已成为关键问题。Elasticsearch作为一种强大的搜索和分析引擎,提供了灵活而高效的数据检索能力,能够帮助我们快速获取所需信息。本篇文章将深入探讨在Elasticsearch中对sellingProducts字段的统计操作。

通过具体的案例和查询示例,我们将展示如何从sell_product_order索引中提取出关键信息,包括产品类型的统计、产品数量的计算以及更复杂的聚合查询。无论是想要了解产品销售状况的市场分析师,还是希望提升数据处理能力的开发者,本文都将为你提供实用的参考和技术支持。

在接下来的部分中,我们将逐步介绍基本的数据结构、关键的统计操作以及相应的Elasticsearch查询语法,帮助读者掌握在实际应用中如何进行数据统计和分析。通过这次学习,我们希望读者能够更加熟悉Elasticsearch的使用,并在实际工作中充分利用这一强大的工具,挖掘出数据背后的价值。

一、基本的数据结构说明

对应ES索引:sell_product_order

针对假设ES文档的基本结构内容如下:

 { "id": "2024041801000115936701", "sellingProducts": [ "FUND_20150718000230030000000000002549", "STOCK_656", "STOCK_4055", "STOCK_1720", "FUND_20180920000230030000000000015303" ] }

我们针对里面的sellingProducts字段进行一些基本的统计操作,本次记录一下相关的基本操作。

二、基本的统计记录

(一)统计当前索引中sellingProducts的所有类型

sell_product_order 索引中检索数据,然后根据 sellingProducts 字段中的内容,聚合出售产品的类型信息,并返回前 10 个最频繁出现的产品类型。

GET /sell_product_order/_search { "size": 0, "aggs": { "types": { "terms": { "script": { "source": """ HashSet types = new HashSet(); for (item in doc['sellingProducts']) { int delimiterIndex = item.indexOf('_'); if (delimiterIndex > -1) { types.add(item.substring(0, delimiterIndex)); } } return types; """, "lang": "painless" }, "size": 10 } } } }

(二)检索指定文档中sellingProducts的数据总量

从索引为 sell_product_order 中检索数据,并返回指定 _id 的文档,并在结果中包含一个名为 sellingProducts_count 的脚本字段,用于计算每个文档中 sellingProducts 字段的大小。

GET /sell_product_order/_search { "query": { "terms": { "_id": [ "2024041801000115936701" ] } }, "script_fields": { "sellingProducts_count": { "script": { "lang": "painless", "source": "doc['sellingProducts'].size()" } } } }

(三)检索指定文档中sellingProducts指定类型的数量统计

sell_product_order 索引中检索具有指定 _id 的文档,并在结果中返回两个计算字段,分别是 fund_countstock_count,它们分别表示文档中以 'FUND_''STOCK_' 开头的元素的数量。

GET /sell_product_order/_search { "query": { "terms": { "_id": ["2024041801000115936701"] } }, "script_fields": { "fund_count": { "script": { "lang": "painless", "source": "int fundCount = 0; for (String item : doc['sellingProducts']) { if (item.startsWith('FUND_')) { fundCount++; } } return fundCount;" } }, "stock_count": { "script": { "lang": "painless", "source": "int stockCount = 0; for (String item : doc['sellingProducts']) { if (item.startsWith('STOCK_')) { stockCount++; } } return stockCount;" } } } }

(四)统计所有文档中sellingProducts中所有元素的总数

sell_product_order 索引中检索所有文档,并计算 sellingProducts 字段中所有元素的总数,将结果作为 total_sellingProducts_items 的值返回。

GET /sell_product_order/_search { "size": 0, "aggs": { "total_sellingProducts_items": { "sum": { "script": { "source": "doc['sellingProducts'].size()", "lang": "painless" } } } } } 

(五)统计所有文档中sellingProducts中详细分类总数统计

计算 sellingProducts 字段中以 FUND_ 开头和以 STOCK_ 开头的元素数量,将结果以 fund_countstock_count 的形式返回。

GET /sell_product_order/_search { "size": 0, "aggs": { "totals": { "scripted_metric": { "init_script": "state.fund_count = 0; state.stock_count = 0;", "map_script": """ if (doc.containsKey('sellingProducts')) { for (def item : doc['sellingProducts']) { if (item.startsWith('FUND_')) { state.fund_count++; } if (item.startsWith('STOCK_')) { state.stock_count++; } } } """, "combine_script": "return state", "reduce_script": """ def total_fund_count = 0; def total_stock_count = 0; for (state in states) { total_fund_count += state.fund_count; total_stock_count += state.stock_count; } return ['fund_count': total_fund_count, 'stock_count': total_stock_count]; """ } } } }

三、总结

在本文中,我们探讨了如何在Elasticsearch中对sell_product_order索引中的sellingProducts字段进行基本的统计操作。通过具体的查询示例,我们展示了多种数据检索和聚合的技巧,帮助我们从海量数据中提取出有价值的信息。

首先,我们介绍了数据结构的基本概念,明确了如何定位目标字段。随后,我们演示了几种不同的统计方法,包括计算产品类型的出现频率、检索指定文档中产品数量、以及对产品类型进行细分统计。这些操作不仅为数据分析提供了基础支持,也为业务决策提供了有力的数据依据。

通过这些示例,读者可以看到Elasticsearch的强大灵活性,以及它在处理复杂数据查询时的高效性。这些技巧不仅适用于特定的业务场景,也为进一步的深入分析和数据挖掘奠定了基础。

在未来的应用中,我们鼓励读者继续探索Elasticsearch的更多功能,如更高级的聚合分析和数据可视化工具,以全面提升数据处理能力和决策支持效果。通过不断实践和学习,大家将能更好地掌握这一工具,从而在日益复杂的数据环境中游刃有余。

Read more

MySQL SQL注入防御全攻略:原理、攻击与防护实践

MySQL SQL注入防御全攻略:原理、攻击与防护实践

MySQL SQL注入防御全攻略:原理、攻击与防护实践 * 一、SQL注入基础概念 * 1.1 什么是SQL注入? * 1.2 注入攻击的危害等级 * 二、SQL注入攻击原理剖析 * 2.1 典型注入场景分析 * 2.1.1 登录绕过攻击 * 2.1.2 数据泄露攻击 * 2.2 注入类型分类 * 三、防御技术深度解析 * 3.1 参数化查询(Prepared Statements) * 3.1.1 PHP实现示例 * 3.1.2 Java实现示例 * 3.2 输入验证与过滤 * 3.2.1 白名单验证

By Ne0inhk
Flutter 组件 meeting_place_core 的适配 鸿蒙Harmony 实战 - 驾驭分布式会议引擎、实现鸿蒙端高性能协作空间与复杂信令分发方案

Flutter 组件 meeting_place_core 的适配 鸿蒙Harmony 实战 - 驾驭分布式会议引擎、实现鸿蒙端高性能协作空间与复杂信令分发方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 meeting_place_core 的适配 鸿蒙Harmony 实战 - 驾驭分布式会议引擎、实现鸿蒙端高性能协作空间与复杂信令分发方案 前言 在后疫情时代的协同办公浪潮中,视频会议已经从单一的垂直应用演变为鸿蒙(OpenHarmony)生态中“泛在协作”的核心基础设施。当你在鸿蒙平板上开启一场跨国技术评审,或者在鸿蒙车机上紧急连线公司晨会时,支撑这一切流畅运行的,是底层极其复杂的会议核心引擎。 meeting_place_core 是一套工业级的、专为多端同步设计的会议核心抽象包。它不负责 UI 渲染,而是专注于房间管理(Room Management)、成员状态流转、信令推送及媒体流的逻辑编排。 适配到鸿蒙平台后,结合鸿蒙强大的分布式能力,meeting_place_core 能让你的 App 轻松实现“手机开会,大屏投映,

By Ne0inhk
解决Google Scholar “We‘re sorry... but your computer or network may be sending automated queries.”的问题

解决Google Scholar “We‘re sorry... but your computer or network may be sending automated queries.”的问题

解决Google Scholar “We’re sorry… but your computer or network may be sending automated queries.”的问题 在使用Google Scholar进行学术搜索时,你可能会遇到错误提示: “We’re sorry… but your computer or network may be sending automated queries. To protect our users, we can’t process your request right now. See Google Help for more information.

By Ne0inhk
Spring Boot快速入手

Spring Boot快速入手

SpringBoot快速入手 * Maven * Maven基本概念 * Maven创建 * 项目构建 * 管理依赖 * Maven仓库 * 本地仓库 * 中央仓库 * 私有服务器 * SpringBoot程序 * Spring Boot项目创建 * 启动项目 * 可能出现的错误 完成StpringBoot环境搭建,并使用起创建一个项目,输出HelloWorld Maven Maven基本概念 什么是Maven 呢? 官方地址https://maven.apache.org/index.html Apache Maven is a software project management and comprehension tool. Based on theconcept of a object model (POM), Maven can manage a

By Ne0inhk