当前位置: 首页 > news >正文

Elasticsearch简介与实操

Elasticsearch是一个分布式、高扩展、高实时的搜索与数据分析引擎。以下是对Elasticsearch的详细介绍:

一、基本概述
Elasticsearch是Elastic Stack(以前称为ELK Stack)的核心组件,Logstash和Beats有助于收集、聚合和丰富数据并将其存储在Elasticsearch中,而Kibana则提供数据可视化、探索和分享的功能。Elasticsearch能够处理各种类型的数据,包括结构化、半结构化和非结构化数据,并为其提供近乎实时的搜索和分析能力。

二、技术特点
1、分布式架构:Elasticsearch采用分布式架构,数据可以在多个节点上进行分散存储,这提高了数据的可靠性和可伸缩性。随着数据和查询量的增长,Elasticsearch可以无缝地扩展其部署规模。
2、实时性:Elasticsearch具有近实时的搜索和分析能力,数据的添加、更新和删除操作几乎可以立即生效。这使得Elasticsearch成为实时数据分析和监控的理想选择。
3、高可用性:通过复制机制和分片技术,Elasticsearch保证了数据的高可用性。即使某个节点发生故障,也能够保证系统的正常运行和数据的不丢失。
4、强大的全文检索能力:Elasticsearch使用倒排索引来实现全文检索,能够快速地搜索和过滤大量的文本数据。同时,它还提供了多种查询方式,包括全文查询、精确查询、范围查询、模糊查询等,以满足不同类型的查询需求。
5、支持多种数据格式:Elasticsearch支持多种数据格式的索引和搜索,包括结构化数据(如数据库中的表)、半结构化数据(如JSON和XML)和非结构化数据(如文本和图像)。
6、可扩展性:Elasticsearch可以通过添加新的节点来扩展系统的容量和性能,实现水平扩展。这使得Elasticsearch能够轻松应对大规模数据集和高并发查询的挑战。

三、应用场景
1、日志分析:Elasticsearch可以用于实时地收集、存储和分析大量的日志数据。它可以帮助开发人员和运维人员快速搜索和分析日志数据,以便定位和解决问题。
2、搜索引擎:Elasticsearch的全文搜索功能非常强大,可以用于构建搜索引擎。它支持复杂的查询和过滤,可以在大规模文档集合中快速地进行全文搜索。
3、实时分析:Elasticsearch可以用于实时分析大规模数据。它可以对结构化和非结构化数据进行索引和分析,支持聚合操作和复杂的数据可视化。
4、电子商务:Elasticsearch可以用于构建电子商务网站的产品搜索功能。它可以根据用户的查询实时地返回相关的产品结果,并支持过滤、排序和推荐等功能。
5、监控和告警:Elasticsearch可以用于实时监控和告警系统。它可以收集和分析各种指标和日志数据,并根据设定的规则和阈值触发告警。
6、地理空间分析:Elasticsearch支持地理空间数据的索引和查询,可以用于构建地理信息系统(GIS)和地理空间分析应用。

四、工作原理
Elasticsearch的工作原理主要基于倒排索引和分布式架构。当用户将数据提交到Elasticsearch数据库中时,Elasticsearch会对数据进行分词处理,并创建一个倒排索引。倒排索引将术语链接到文档中的位置,从而实现快速文本搜索。同时,Elasticsearch通过分片技术将数据分散存储在多个节点上,并通过复制机制增强容错能力和可用性。当用户进行查询时,Elasticsearch会根据倒排索引快速找到相关文档,并根据权重对结果进行排名和打分,最终将返回结果呈现给用户。

五、详解ES环境搭建
ES下载安装

首先我们需要下载ES压缩包

curl -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.12.0-linux-x86_64.tar.gz

通过curl指令完成下载后,通过tar 指令进行解压:

tar -zxvf elasticsearch-7.12.0-linux-x86_64.tar.gz

完成配置后我们就可以进入bin目录,执行./elasticsearch将es启动。

查看控制台没有报错后,我们可以通过curl指令查看es是否正常运行:

curl 127.0.0.1:9200

kibana下载安装

kibana是操作es的图形界面工具,用起来非常方便,接下来我们就开始介绍一下kibana的安装步骤,我们首先到达kibana官网,找到和我们ES一致的Linux版本进行下载:

Kibana 7.12.0:https://www.elastic.co/cn/downloads/past-releases/kibana-7-12-0

完成后我们进入kibana根目录的bin目录执行./kibana将其启动。完成后我们通过浏览器访问5601端口如果出现如果进入kibana初始化界面。

在界面我们可以按需点击add data选择simple data等面板数据导入。

详解ElasticSearch和Kibana基础搜索

基础插入和查询

接下来就是正式的介绍Kibana对于ES的操作步骤了,在此之前我们先找到dev tools界面:

在这里插入图片描述

若我们希望通过kibana插入一条数据,我们就可以通过put指令完成,如下所示,我们指定索引名为customer,type为_doc并指定id为1的文档设置数据text为hello kibana

PUT /customer/_doc/1
{"text":"hello kibana"
}

完成后我们可以直接通过GET指令获取对应的指令为GET /customer/_doc/1,最终查询结果如下:

在这里插入图片描述

查询所有

通过上一个例子我们了解了基于kibana的基础读写ES操作,接下来我们就来演示一下几种比较常见的查询,对应指令如下,可以看到我们指定导入数据的index为kibana_sample_data_ecommerce,并键入_search指令:

GET /kibana_sample_data_ecommerce/_search

最终我们就可以看到下面这样的输出,简单介绍一下几个比较重要的字段:

  1. took:查询耗费时间,单位为毫秒。
  2. timed_out:搜索请求是否超时,这里显示false即没有超时。
  3. _shards:查询的分片数,并列出成功、失败、跳过的条目数。
  4. max_score:最匹配的一份文档的分数值。
  5. hits.sort:具体文档列表信息
  6. hits._score:具体文档的相关性得分,例如下图第一条目的文档就是1分。

在这里插入图片描述

分页查询

如果我们希望分页查询,则可以通过from指定起始页,通过size指定每页的大小,对应的查询示例如下:

GET /kibana_sample_data_ecommerce/_search
{"query": { "match_all": {} },"sort": [{ "email": "asc" }],"from": 1,"size": 10
}

输出结果:

在这里插入图片描述

指定条件字段

我们希望查询customer_full_name中包含Abd或者Adams中的数据,对此我们就可以通过match指明查询的字段和字段值即可:

GET /kibana_sample_data_ecommerce/_search
{"query": { "match": { "customer_full_name": "Abd Adams" } }
}

输出结果:

在这里插入图片描述

段落匹配

上一个例子是针对每一个词项进行匹配,如果我们希望查到customer_full_name中带有Abd Adams的数据,我们就可以通过段落匹配即可实现,对应的指令如下:

GET /kibana_sample_data_ecommerce/_search
{"query": { "match_phrase": { "customer_full_name": "Abd Adams" } }
}

输出结果:

在这里插入图片描述

多条件查询

es支持多条件查询,例如我们希望查询customer_full_name带有Abd、Adams但是customer_first_name不包含Abd的数据,那么我们就可以指定:

  1. must中指明customer_full_name为Abd、Adams。
  2. must_not中指明customer_first_name为Abd。

对应的指令示例如下:

GET /kibana_sample_data_ecommerce/_search
{"query": {"bool": {"must": [{ "match": { "customer_full_name": "Abd Adams" } }],"must_not": [{ "match": { "customer_first_name": "Abd" } }]}}
}

输出结果:
在这里插入图片描述

复合条件查询

我们希望查询符合如下3个条件的数据:

  1. customer_full_name为Abd、Adams。
  2. currency为EUR。
  3. customer_id范围在50~55。

对此我们的编写的检索语句为:

  1. 指定查询为bool多条件查询。
  2. must通过match_phrase关键字限定customer_full_name为Abd Adams。
  3. filter过滤出值为EUR的currency。
  4. 通过customer_id限定customer_id范围为50~55。

对应的我们给出查询语句,读者可结合表述进行理解,这里笔者需要补充一点,如果查询时单单使用filter进行过滤的话,查询结果是是不会计算max_score等匹配相关的结果,得到每份文档的匹配分数还是建议使用must:

GET /kibana_sample_data_ecommerce/_search
{"query": {"bool": {"must": [{"match_phrase": {"customer_full_name": "Abd Adams"}}],"filter": [{"term": {"currency": "EUR"}},{"range": {"customer_id": {"gte": 50,"lte": 55}}}]}}
}

简单聚合查询

es同样是支持聚合操作,例如我们希望看到每个customer_full_name对应的文档数,我们就可以通过group_by_state查询指定term(词项)为customer_full_name,被聚合的字段无需对分词统计,所以使用customer_full_name.keyword对整个字段统计:

GET /kibana_sample_data_ecommerce/_search
{"size": 0,"aggs": {"group_by_state": {"terms": {"field": "customer_full_name.keyword"}}}
}

输出结果:

在这里插入图片描述

嵌套聚合

基于上述基础,我们希望查询出这每个人taxful_total_price的平均值,我们可以通过es的嵌套聚合实现,语句如下,基于上述语法基础再声明一个aggs指明avg的字段为taxful_total_price即可:

GET /kibana_sample_data_ecommerce/_search
{"size": 0,"aggs": {"group_by_state": {"terms": {"field": "customer_full_name.keyword"},"aggs": {"average_total_price": {"avg": {"field": "taxful_total_price"}}}}}
}

聚合结果排序查询

还是以上面的排序为例,如果我们希望通过taxful_total_price的结果进行升序排序的话,我们可以通过order指明使用的排序结果,以笔者本次示例来说,也就是通过average_total_price的结果进行排序,所以对应的语法如下:

GET /kibana_sample_data_ecommerce/_search
{"size": 0,"aggs": {"group_by_state": {"terms": {"field": "customer_full_name.keyword","order": {"average_total_price": "asc"}},"aggs": {"average_total_price": {"avg": {"field": "taxful_total_price"}}}}}
}

从结果来看,输出的数据确实是按照聚合排序数据显示:
在这里插入图片描述

相关文章:

Elasticsearch简介与实操

Elasticsearch是一个分布式、高扩展、高实时的搜索与数据分析引擎。以下是对Elasticsearch的详细介绍: 一、基本概述 Elasticsearch是Elastic Stack(以前称为ELK Stack)的核心组件,Logstash和Beats有助于收集、聚合和丰富数据并将…...

用python将一个扫描pdf文件改成二值图片组成的pdf文件

使用墨水屏读书现在似乎越来越流行,这确实有一定的好处,例如基本不发热,电池续航时间超长,基本不能游戏所以有利于沉浸式阅读,还有不知道是不是真的有用的所谓防蓝光伤害。但是,如果阅读的书籍是扫描图片组…...

Failed to start Docker Application Container Engine

说明: 1)访问应用业务,读取不到数据,show databases;查看数据库报错 2)重启docker服务,服务启动失败,查看日志报错如下图所示 3)报错信息:chmod /data/docker: read-only…...

ESLint的简单使用(js,ts,vue)

一、ESLint介绍 1.为什么要用ESLint 统一团队编码规范(命名,格式等) 统一语法 减少git不必要的提交 减少低级错误 在编译时检查语法,而不是等js引擎运行时才检查 2.eslint用法 可以手动下载配置 可以通过vue脚手架创建项…...

实景三维赋能国土空间智慧治理

随着城市化进程的不断推进,国土空间的合理规划与高效管理成为政府面临的一项重大挑战。在这个过程中,实景三维技术作为一种新兴的信息技术手段,正在逐渐改变传统国土空间治理的方式,为智慧城市的建设提供了新的可能。本文旨在探讨…...

树链剖分(重链剖分)

树链剖分的核心思想就是将一棵树剖分成一条一条的链 因为树不好处理 但链比较好处理 为了学会它 我们先要学会树上dfs(深度优先搜索) 然后就没了(雾) Because 树链剖分需要用到两个dfs 哦对了 我们还要了解以下的知识点 1.子…...

幻读是什么?用什么隔离级别可以防止幻读?

幻读是什么? 幻读(Phantom Read) 是数据库事务中的一种现象,指的是在一个事务中,当执行两次相同的查询时,第二次查询返回的结果集包含了第一次查询中不存在的行,或者第一次查询中存在的行在第二…...

[Unity Demo]从零开始制作空洞骑士Hollow Knight第二十集:制作专门渲染HUD的相机HUD Camera和画布HUD Canvas

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、制作HUD Camera以及让两个相机同时渲染屏幕二、制作HUD Canvas 1.制作法力条Soul Orb引入库2.制作生命条Health读入数据3.制作吉欧统计数Geo Counter4.制作…...

智能安全配电装置在高校实验室中的应用

​ 摘要:高校实验室是科研人员进行科学研究和实验的场所,通常会涉及到大量的仪器设备和电气设备。电气设备的使用不当或者维护不周可能会引发火灾事故。本文将以一起实验室电气火灾事故为例,对事故原因、危害程度以及防范措施进行分析和总结…...

网络安全等级保护测评机构管理办法(全文)

网络安全等级保护测评机构管理办法(公信安〔2018〕765号) 第一章 总则 第一条 为加强网络安全等级保护测评机构(以下简称“测评机构”)管理,规范测评行为,提高等级测评能力和服务水平,根据《中华人民共和国网络安全法…...

Flutter:shared_preferences数据存储,数据持久化,token等信息存储

官方示例:简单调用 // 初始化示例 final SharedPreferences prefs await SharedPreferences.getInstance(); // 存int await prefs.setInt(counter, 10); // 存bool await prefs.setBool(repeat, true); // 存double await prefs.setDouble(decimal, 1.5); // 存st…...

FileProvider高版本使用,跨进程传输文件

高版本的android对文件权限的管控抓的很严格,理论上两个应用之间的文件传递现在都应该是用FileProvider去实现,这篇博客来一起了解下它的实现原理。 首先我们要明确一点,FileProvider就是一个ContentProvider,所以需要在AndroidManifest.xml里面对它进行声明: <provideran…...

python学习记录18

1 函数的定义 python中的函数指使用某个定义好的名字指代一段完整的代码&#xff0c;在使用名字时可以直接调用整个代码&#xff0c;这个名字叫做函数名。利用函数可以达到编写一次即可多次调用的操作&#xff0c;从而减少代码量。 函数分为内置函数与自定义函数。内置函数例…...

云原生之k8s服务管理

文章目录 服务管理Service服务原理ClusterIP服务 对外发布应用服务类型NodePort服务Ingress安装配置Ingress规则 Dashboard概述 认证和授权ServiceAccount用户概述创建ServiceAccount 权限管理角色与授权 服务管理 Service 服务原理 容器化带来的问题 自动调度&#xff1a;…...

redis工程实战介绍(含面试题)

文章目录 redis单线程VS多线程面试题**redis是多线程还是单线程,为什么是单线程****聊聊redis的多线程特性和IO多路复用****io多路复用模型****redis如此快的原因** BigKey大批量插入数据测试数据key面试题海量数据里查询某一固定前缀的key如果生产上限值keys * &#xff0c;fl…...

再次讨论下孤注一掷

在孤注一掷中的黑客技术里面&#xff0c;简单介绍了电影孤注一掷中用的一些"黑科技"&#xff0c;这里继续讨论下&#xff0c;抛弃这些黑科技&#xff0c;即使在绝对公平的情况下&#xff0c;你也一样赢不了赌场 相对论有一个假设就是光速不变&#xff0c;这里也有个…...

LeetCode46.全排列

LeetCode刷题记录 文章目录 &#x1f4dc;题目描述&#x1f4a1;解题思路⌨C代码 &#x1f4dc;题目描述 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例1 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,…...

蓝桥杯-洛谷刷题-day4(C++)

目录 1.高精度乘法 i.P1303 A*B Problem高精度乘法 2.P4924 [1007] 魔法少女小Scarlet i.题目 ii.代码 3.二维数组 i.二维数组的建立 ii.备份 iii.二维数组的转动 4.指令的及时处理 1.高精度乘法 即&#xff0c;将每一位变为数组中的一位&#xff0c;并在数组中以倒序排列&a…...

c++总复习

1. C 中的移动语义及其作用 定义 移动语义是 C 11 引入的一种重要特性&#xff0c;它用于优化对象的资源管理&#xff0c;特别是在涉及对象所有权转移的场景中。传统的 C 语义在对象赋值或传递给函数时&#xff0c;通常会进行拷贝操作&#xff0c;即创建源对象的一个完整副本&…...

设计模式之策略模式-工作实战总结与实现

文章目录 应用场景存在问题解决方案继续延伸 应用场景 假设有这样的业务场景&#xff0c;大数据系统把文件推送过来&#xff0c;根据不同类型采取不同的解析方式。多数的小伙伴就会写出以下的代码&#xff1a; public class Question {public static void main(String[] args…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...