走进Elasticsearch
- 什么是ES
- 是一个分布式、RESTful风格的搜索和数据分析引擎
- 中文参考文档: 《Elasticsearch中文文档》 | Elasticsearch 技术论坛
- elasticSearch官网: Functions and Operators | Elasticsearch Guide [7.11] | Elastic
- 查询方式
- Kibana查询(原生查询) - DSL
- 概念:ES特定的查询语言,一套基于JSON的查询语言。
- DSL查询直接使用Elasticsearch的API进行数据检索,所以要求用户对ES的查询机制有更深的了解
- 特点:DSL提供了强大的查询能力,包括叶子查询字句(如match、term、range)和复合查询字句(用于将多个查询逻辑组合起来)
- 概念:ES特定的查询语言,一套基于JSON的查询语言。
- SQL编程 (对原生DSL加工)- esSQL
- 概念:SQL本质上是一个翻译器,它将SQL语句翻译成Elasticsearch的原生查询DSL,默认返回的是一个JSON结构
- 增加format参数,返回就是表格形式展现:/sql?format=txt
- 优点:SQL是一个广义的标准查询语言,降低了学习成本。
- 常见的坑
- 1,查询的SQL中不允许包含 换行符 "/n"
- 2,SQL查询筛选中带中文不生效,可以考虑升级ES的SQL版本
- 3,查询字符串类型,SQL中需包含 ''
- 4,如果ES服务端支持中文查询,则客户端不需要配置相关分词
- 5,ES不建议跨index查询,如果需要跨index查询,在同步关系数据库数据时到ES,可以联合多张表查询返回的结果集到ES,毕竟一个index可以看成一个库或者一张表
- ES-SQL安装
- 概念:SQL本质上是一个翻译器,它将SQL语句翻译成Elasticsearch的原生查询DSL,默认返回的是一个JSON结构
- Es默认返回10000条数据,要调大服务端就要改配置
- Kibana查询(原生查询) - DSL
- 基本概念
- 索引(Index):可看成关系数据库中的 表
- 类型(Type):可看成关系数据库中表的 数据类型
- 文档(Document):可看成关系数据库中表的每一行
- 映射(Mapping):类似于数据库中的“表结构定义”,在Elasticsearch中,映射可以动态创建,也可以在创建索引时预先定义。
- 集群(Cluster):集群是由一个或多个节点组成的集合,它们共同工作以存储和搜索数据。集群可以跨多台机器分布,以实现数据的备份冗余和高可用性。
- 节点(Node):节点是集群中的一个实例。节点可以处理数据索引、搜索和聚合等操作。
- 分片(Shard):分片是索引的一部分,用于实现数据的分布式存储。每个分片都是一个独立的数据结构,可以在不同节点上复制和分割。
- 副本(Replica):副本是分片的复制品,用于提高数据的可靠性和搜索性能。每个分片可以有一个或多个副本,它们可以在节点间复制数据以提供故障转移能力。
- 倒排索引(Inverted Index):倒排索引是Elasticsearch用于快速搜索的关键数据结构,允许系统通过词汇快速找到包含该词汇的文档列表。
- 应用场景
- 全文搜索:如电商商品搜索、应用内搜索等。
- 日志分析:支持全栈日志分析,从采集到展示实现秒级响应。
- 运维监控:时序数据分析,适用于系统监控等。
- 安全分析:分析网络数据和安全事件。
- 数据监控:作为主要的后端存储,提供持久存储和统计功能。
- 工作原理
- ES的工作原理基于Lucene库,实现了准实时的搜索功能。
- 索引过程:当文档被存储到ES中时,它将在1秒内以几乎实时的方式进行索引。这一过程包括分析文档内容,创建倒排索引等,以便能够快速检索信息。
- 搜索过程:ES使用按段搜索的概念来执行查询。每个段相当于一个数据集,包含了一系列的文档。提交点记录了所有已知的段,使得搜索操作可以跨越多个段进行。
- Lucene库的工作原理
- 反向索引(Inverted Index):这是Lucene高效检索数据的关键所在。在正向索引中,我们根据内容的记录来查找内容出现的位置;而在反向索引中,是根据某个词出现的位置来查找这个词,即建立了一个从词到文档的映射关系。
- 数据分段(Segments):Lucene将索引分为多个独立的段,每个段都是只读的。这种设计避免了在读写操作中的锁竞争,显著提高了性能。
- 核心组件:Lucene由多个组件构成,包括IndexWriter负责写入索引、IndexReader负责读取索引,以及QueryParser用于解析查询语句等。这些组件共同作用,实现了索引的建立、查询和优化。
- 文本分析与分词(Analysis & Tokenization):在索引文档之前,Lucene会通过分析器(Analyzer)对文本进行处理,这包括分词、去除停用词、同义词处理等步骤,以确保索引的效率和准确性。
- 查询操作:用户输入查询后,Lucene会对查询语句进行类似的文本分析和处理,然后利用已经建立的反向索引快速找到匹配的文档,并按照相关性对结果进行排序
- ES的工作原理基于Lucene库,实现了准实时的搜索功能。
- 常踩的坑
- 聚合分析问题:ES中的聚合操作分为分桶、度量和管道三种类型。在多主分片环境下,可能会出现聚合结果不准确的情况。这是因为在分布式环境中,不同分片间的数据处理可能导致聚合结果的差异。
- 使用更高效的查询:尝试简化查询,减少不必要的字段和复杂的查询逻辑,以提高查询效率。
- 调整分桶策略:对于涉及大量数据和多次分桶的聚合操作,合理设计分桶策略可以减少查询时间。例如,可以考虑使用组合聚合(composite aggregations)来减少聚合的数量。
- 优化索引设置:确保索引的映射和设置能够支持高效的聚合操作。例如,使用适当的分片和副本策略,以及优化索引的存储结构。
- 调整内存分配:增加Elasticsearch的堆内存分配可以提高聚合操作的性能,但这可能会影响其他系统资源的使用。
- 利用缓存:利用Elasticsearch的查询结果缓存机制,对于重复的或经常执行的聚合查询,可以将结果缓存起来,以提高响应速度。
- 使用近似聚合:如果精确度不是特别重要,可以使用近似聚合(如cardinality aggregation)来加快查询速度。
- 调整搜索设置:通过调整搜索设置,比如减小size参数的值,可以加快聚合查询的速度。
- 优化去重操作:对于需要去重的聚合操作,可以尝试使用tophits聚合或者top_hits与collapse结合使用,以提高效率。
- 时区问题:ES底层默认采用UTC时间格式,而不同地区的项目可能需要使用本地时间。这可能导致查询结果与期望不符,特别是在涉及时间排序、范围查询或聚合的场景中。
- 确保数据一致性: 插入时间格式前,统一使用UTC时间格式,避免由于不同时区引起的混乱和不一致
- 程序中处理时区:在Java等编程语言中处理日期时间字符串时,如果字符串没有时区信息,需要明确指定时区来进行转换,以避免默认使用系统时区可能导致的问题。
- 存储类型考虑:对于日期时间类型的字段,存储时应考虑是否需要包含时区信息。如果是时间戳(Long类型),则通常已经是UTC时间,需要在应用层转换为合适的时区。
- Kibana设置时区:在Kibana的管理界面中,您可以在“Management” > “Advanced Settings”下设置时区,以确保在Kibana显示的视图和图表中使用正确的时区
- 默认映射问题:ES允许在写入索引时不设置映射,但这可能导致后续查询效率低下或数据类型错误等问题。因此,合理配置映射对于保证索引的性能和准确性至关重要(建索引时,就要考虑映射索引的类型)
- 聚合分析问题:ES中的聚合操作分为分桶、度量和管道三种类型。在多主分片环境下,可能会出现聚合结果不准确的情况。这是因为在分布式环境中,不同分片间的数据处理可能导致聚合结果的差异。
相关文章:
走进Elasticsearch
什么是ES 是一个分布式、RESTful风格的搜索和数据分析引擎 中文参考文档: 《Elasticsearch中文文档》 | Elasticsearch 技术论坛 elasticSearch官网: Functions and Operators | Elasticsearch Guide [7.11] | Elastic查询方式 Kibana查询(原…...
QT TCP服务器和客户端示例程序
下面是一个简单的 Qt TCP 服务器和客户端示例,演示了如何使用 vSetDriver、vSetListener 和 vTcpServerStart 函数。假设 vSetDriver 和 vSetListener 是你定义的自定义函数。 TCP 服务器部分 tcpserver.h #ifndef TCPSERVER_H #define TCPSERVER_H#include <QT…...
Xlua三方库Android编译出错解决办法
Xlua三方库Android编译出错解决办法 最近听老师的热更教程,讲到xlua编译android平台会报错,也是看了老师的博客,按照方法去解决,然而问题并没有解决。应该是因为代码更新或者版本不一样,在此简单记录一下解决过程。 参…...
美国犹他州立大学《Nature Geoscience》(IF=18)!揭示草本植物对土壤有机碳的重要贡献!
随着全球变暖的影响越来越显著,碳固定成为了一个备受关注的话题。在这个背景下,热带草原被认为是一个潜在的碳固定区域。然而,目前的研究主要关注于在热带草原中种植树木,以期望增加土壤有机碳含量。但是,热带草原中的…...
高考专业抉择计算机专业热度不减,兴趣、实力与挑战并存。
作为一名即将步入大学校门的高考生,我对于计算机相关专业是否仍是热门选择感到困惑。在过去几年里,计算机科学与技术、人工智能、网络安全、软件工程等专业一直备受追捧,吸引了无数学生。然而,随着市场竞争加剧和市场饱和度提高&a…...
Flask-RQ
Flask-RQ库教程 Flask-RQ 是一个用于在 Flask 应用中集成 RQ(Redis Queue)的扩展。RQ 是一个简单的 Python 库,用于将任务排入 Redis 队列并异步执行这些任务。这对于处理长时间运行的任务(如发送电子邮件、生成报告等࿰…...
LeetCode 58. 最后一个单词的长度
LeetCode 58. 最后一个单词的长度 你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串 示例 1: 输入:s “Hello World”…...
3阶段提交协议(3pc)
3阶段提交协议(3pc) 1 简介 三阶段提交协议是一个强一致、中心化的原子提交协议。解决了分布式事务、副本容错等分布式问题。其核心思想是将2PC的二阶段提交协议的“准备阶段”一分为二,形成了由CanCommit、PreCommit、DoCommit三个阶段组成…...
802.11中的各种帧
在无线网络中,802.11协议定义了三种类型的帧:管理帧(Management Frames)、控制帧(Control Frames)和数据帧(Data Frames)。每种类型的帧都有其特定的功能,帮助维护和管理…...
SAP PP学习笔记21 - 计划策略的Customize:策略组 > 策略 > 需求类型 > 需求类(消费区分,计划区分)
上面几章讲了MTS,MTO,ATO的计划策略。 本章来讲一下它的后台 Customize。 1,Customizeing:Planned Indep.Reqmts Management 这是配置计划策略的整个过程: - Requirements Type / Class 需求类型 / 需求类 - Plann…...
axure9设置组件自适应浏览器大小
问题:预览时不展示下方的滚动条 方法一:转化为动态面板 1.在页面上创建一个矩形 2.右键-转化为动态面板 3.双击进入动态面板设置 4.设置动态面板矩形的颜色 5.删除原来的矩形 6.关闭动态面板,点击预览 7.此时可以发现底部没有滚动条了 方法…...
示例:WPF中TreeView自定义TreeNode泛型绑定对象来实现级联勾选
一、目的:在绑定TreeView的功能中经常会遇到需要在树节点前增加勾选CheckBox框,勾选本节点的同时也要同步显示父节点和子节点状态 二、实现 三、环境 VS2022 四、示例 定义如下节点类 public partial class TreeNodeBase<T> : SelectBindable<…...
C++ explicit关键字的用法
在C中,explicit关键字用于构造函数和转换运算符,以防止隐式转换。它可以帮助我们避免意外的类型转换,从而提高代码的安全性和可读性。explicit关键字只能用于单参数构造函数和转换运算符。 使用explicit的场景 单参数构造函数: 当…...
51.Python-web框架-Django开始第一个应用的增删改查
目录 1.概述 2.创建应用 创建app01 在settings.py里引用app01 3.定义模型 在app01\models.py里创建模型 数据库迁移 4.创建视图 引用头 部门列表视图 部门添加视图 部门编辑视图 部门删除视图 5.创建Template 在app01下创建目录templates 部门列表模板depart.ht…...
Redis之线程IO模型
引言 Redis是个单线程程序!这点必须铭记。除了Redis之外,Node.js也是单线程,Nginx也是单线程,但是他们都是服务器高性能的典范。 Redis单线程为什么能够这么快! 因为他所有的数据都在内存中,所有的运算都…...
针对微电网中可时移,柔性,基础负荷的电价响应模型---代码解析
前言: 在上两篇帖子中,讲解了我对于粒子群算法的理解,站在巨人的肩膀上去回望:科研前辈们确实非常牛逼,所以它才成为了非常经典的算法。这篇帖子主要是想分享一下,对于微电网、电力系统的论文中,…...
git使用http协议时免密pull和push方法
1、创建文件 在项目目录下创建.git-credentials文件,内容如下,填入自己的用户名和密码即可,如果是gitlab,把地址换成自己的gitlab的地址即可。 https://{用户名}:{密码}github.com2、终端执行 git config --global credential.…...
编译期间生成代码(Lombok原理)
通过在编译期间,修改Java的AST(Abstract Syntax Tree)树,可以往类中,添加/修改(覆盖)方法、属性等。 现在比较常见的三方依赖例子有:Lobbok的Data可以生成get、set方法,Sl4j2可以生成静态常量l…...
第2讲:pixi.js 绘制HelloWorld
基于第0讲和第1讲,我们增添了vite.config.ts文件。并配置了其他的http端口。 此时,我们删除掉没用的东西。 删除 conter.ts、typescript.svg 在main.ts中改成如下内容: import {Application, Text} from pixi.js import ./style.css// 指明…...
golang HTTP2 https测试POST变GET问题小记
概述 因为工作需要协助修改某个golang程序,添加双向认证。但是在调整的过程遇到一个HTTP POST请求变成GET诡异的问题,最后各种搜索,总算解决,博文记录,用于备忘。 代码 服务端 因工作内容,代码有删减&a…...
Linux下的lvm镜像与快照
lvm镜像(mirror) (1)划分三个PV,其中2个PV大小要一模一样 Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units cylinders of 16065 * 512 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/…...
嵌入式linux系统中SPI子系统原理分析01
大家好,今天给大家分享一下,如何使用linux系统中的SPI通信协议,实现主从设备之间的信息传递。 SPI是一种常见的设备通用通信协议。它是一个独特优势就是可以无中断发送数据,可以连续发送或接收任意数量的位。而在I2C和UART中,数据以数据包的形式发送,有限定位数。 …...
Part 4.2 背包动态规划
->背包模型模板(0/1,分组,完全,多重)<- [NOIP2018 提高组] 货币系统 题目背景 NOIP2018 提高组 D1T2 题目描述 在网友的国度中共有 n n n 种不同面额的货币,第 i i i 种货币的面额为 a [ i ] a[i] a[i],你可以假设每…...
Elasticsearch-使用Logstash同步Mysql
1.安装logstash es服务器版本必须和logstash版本一致 7.9.2 在/usr/local/src/下新建logstash文件夹,解压 下载logstash后查看是否安装成功,在logstash的bin目录下输入指令: ./logstash -e input { stdin { } } output { stdout {} }2.my…...
6.17作业
升级优化自己应用程序的登录界面。 要求: 1. qss实现 2. 需要有图层的叠加 (QFrame) 3. 设置纯净窗口后,有关闭等窗口功能。 4. 如果账号密码正确,则实现登录界面关闭,另一个应用界面显示。 //发送端头文件…...
算法思想个人总结(结合生活理解)
主要思想: 结合生活和游戏理解思想,先知道什么场景用什么算法,然后再理解就能记住 遇到问题可以考虑选择使用,这样才是学活了 https://www.yuque.com/yuqueyonghu5znoyv/ifb5ga/nfcvg3ft9ryuqeem?singleDoc# 《元启发式算法》...
openh264 帧间预测编码过程源码分析
openh264 OpenH264 是一个开源的 H.264 编码和解码器,由思科系统开发并维护。它专为实时应用程序如 WebRTC 设计,提供了从基础到高级特性的广泛支持。OpenH264 的编码器支持从 Constrained Baseline Profile 到 5.2 级别,允许任意分辨率的编…...
Linux网络 - HTTP协议
文章目录 前言一、HTTP协议1.urlurl特殊字符 requestrespond 总结 前言 上一章内容我们讲了在应用层制定了我们自己自定义的协议、序列化和反序列化。 协议的制定相对来讲还是比较麻烦的,不过既然应用层的协议制定是必要的,那么肯定已经有许多计算机大佬…...
面试题——Nginx
1.Nginx是什么? 是一个高性能的Web服务器和反向代理服务器,也可以作为静态文件的缓存服务器,也能够进行负载均衡。 2.Nginx的作用? 1.反向代理:将多台服务器代理为一台服务器。客户端不了解底层服务端。 2.负载均衡…...
持续学习的综述: 理论、方法与应用
摘要 为了应对现实世界的动态,智能系统需要在其整个生命周期中增量地获取、更新、积累和利用知识。这种能力被称为持续学习,为人工智能系统自适应发展提供了基础。从一般意义上讲,持续学习明显受到灾难性遗忘的限制,在这种情况下…...
国外平面设计/优化网站做什么的
BCD码一般在时钟芯片中会采用,比如2019-03-29 15:42:54会表示为 0x20 0x19 0x03 0x29 0x15 0x42 0x54,具体十进制跟BCD码的关系可以百度;BCD转为十进制 int BCDToInt(unsigned char value) {int temp 0;temp (value>>4)*10;temp va…...
站长工具seo诊断/免费推广的app有哪些
2019独角兽企业重金招聘Python工程师标准>>> java中final关键字通常指“这是无法改变的”。 可能使用final的三种情况:数据、方法、类。 1. final 数据 对于基本类型,final使数值恒定不变; 对于引用类型,final使引用…...
网站建设九步走/百度竞价推广怎么做
9 为虚拟机启用容错在本节中,将把上一节安装配置的虚拟机启用FT(容错)功能。在启用容错功能之前,修改虚拟机的配置为2个CPU(2个插槽、每个插槽1个内核)、512MB内存。之后为虚拟机启用容错功能,主…...
宁夏交通建设质监局官方网站/长沙哪家网络公司做网站好
X86处理器系统简介X86主板布局PCI是Peripheral Component Interconnect(外设部件互连标准)的缩写,本文介绍x86处理器系统下PCI相关知识。x86主板图如图 1.1所示:图 1.1 X86主板布局从图中可以看出,靠近CPU的是北桥芯片(North Bridge)…...
网站用哪些系统做的好处/站长统计app下载免费
当下物联网发展迅猛,物联网卡可以接受短信指令,实现千里之外尽可掌控。本人做过一个这类项目,把相关经验记录下来,分享给需要的人。 物联网卡通讯其实跟电话卡一样,可以使用CMPP协议。不过由于物联网卡位数为13位&…...
python一句做网站/外贸推广方式都有哪些
集群流控 我们已经知道如何为应用接入限流了,但是到目前为止,这些还只是在单机应用中生效。也就是说,假如你的应用有多个实例,那么你设置了限流的规则之后,每一台应用的实例都会生效相同的流控规则,如下图…...