ElasticSearch总结
ES是什么
ES是一个天生支持分布式的搜索、聚合分析的存储引擎
基于Java开发 基于Lucene的开源分布式搜索引擎
ELK : elasticSearch Logstah Kibana
加入 Beats 后
ELK 改为 :Elastic stack
ES解决了什么问题
ES解决的核心问题 : 1.海量数据 2.全文检索
ES不擅长的场景 : 管理数据、事务场景、大单页查询、数据实时写入更新
ES生产模式和开发模式
生产环境 :用于生产环境的运行模式,生产模式下要考虑高可用、故障转移、性能优化等安全因素 ,要求比较高
开发环境 :用于测试的运行环境、相对要求比较低
引导检查 :
单节点发现 :会将自己设置为主节点,不允许其他节点加入,会放弃一些检查
ES存储和索引
ES是面向文档存储的,索引 :相同类型的文档的集合
文档(document) :每条数据是一个文档
词条(term) : 文档按照语义分成词条
ES和MYSQL 对比
倒排索引
Mysql : 采用 正向索引 like 等内容检索 操作 会 逐行 扫描
Es采用倒排索引
查询过程 :
1 分词
2 根据词条去列表查询文档id
3 根据文档id查询文档
4 存入结果集
ES数据同步
ES 中的数据 来自于Mysql ,因为当mysql发生改变时,会涉及到数据同步问题
常见模型 : 读写分离 ,ES负责搜索和查询 ,Mysql只负责 数据写入和更新
1.同步双写数据同步
效率较低 ,业务耦合,不推荐
2.异步双写
使用 消息队列(mq)来异步实现数据同步,缺点:依赖mq的可靠性
3.监听binlog
使用中间件来监听 mysql 的binlog (如:canal)来完成数同步
可完全解除服务间耦合 。需要开启binlog
ES集群
海量数据存储问题 :将索引库 从逻辑上拆分为多个分片(shard),存储到多个节点
单点故障问题:将分片数据再不同节点备份
节点角色
脑裂问题
默认情况 :每个节点都是 master eligible (备选主节点)一旦 msater 宕机 ,当值 master 和某些节点连接不上
其他节点会选举一 个新的主节点 ,网络恢复会出现两个master节点 。 称为 :脑裂问题
ES处理: 选票超过 eligible节点数+1 / 2 ,才能当主, eligible 数量配置为 奇数
配置:discovery.zen.minimum_master_nodes es7.0之后,默认开启此配置
ES分布式存储
新增文档时:通过hash 算法来计算 文档应该存储到那个分片
对文档ID 进行哈希 ,对分片数量取余
索引库一旦创建,分片数量不能修改
ES分布式查询
Es查询分为两个阶段 :
- Scatter phase 分散阶段 ,协调节点把请求分发到每个分片
- Gather phase 聚集阶段 , 协调节点将 查询结果汇总 请返回给用户
故障转移
主节点故障 : eligible master 重新选举为主节点
数据节点故障 :主节点监控分片 :, 将故障节点的分片 转移到 其他健康的节点
索引库操作
ES的操作语法 称为 DSL :类似于sql
mapping映射属性
Mapping是对索引库中 文档的约束 ,常见的 mapping属性包括 :
Type :字符 类型 :字符串text(可分词)、keyword(不可分割)
数值 :long、int、short、byte、double float
布尔 :boolean
日期 :date
对象 :object
Index :是否创建 索引 默认 true
analyzer:使用哪种分词器
properties :该字段的子字段
创建索引库
ES 创建索引库和mapping的 DSL语法如下

查询、删除索引库
查看 : GET /索引库名称
删除: DELETE/索引库名称
修改索引库 :索引库和mapping禁止修改,因为修改会影响到 倒排索引和分词
但是可以 添加新的字段:
Put /索引库名称/_mapping
{
Xxx
}
文档操作
文档类似于 mysql中的 行
新增文档
post操作
查看、删除 文档
GET /索引库名/_doc/文档id
DELETE/索引库名/_doc/文档id
修改文档
**1.全量修改 :**删除旧文档,添加新文档
blog.csdnimg.cn/0d9a8da616aa4321918da2be370b4e8e.png)

2.局部修改。修改指定得字段值
DLS查询语法
查询类型 :
查询所有 :例 :match_all
全文检索 :利用分词器,去倒排索引查询匹配 例: match_query multi_match_query
精确查询 :根据keyword等完整词条查询,不需要查询分词内容 例: ids range term
地理查询 : geo_distanch geo_bounding_box
符合查询 :将以上方式组合使用 并且可以使用 与或非
DSL Query 基本语法

全文检索查询
利用分词器,去倒排索引查询匹配 例: match_query multi_match_query
常用于:搜索框
Match查询 :根据 关键字 分词,去倒排索引库中检索
multi_match :可以同时查询多个字段

精确查询
精确查询一般用于查找 keyword 数值、日期、bool 等 不可分词字段 、
Term 查询 :根据词条精确值 查询
Range 查询 :根据值的范围查询 gt 大于 gte大于等于 lt 小于 lte 小于等于

地理查询
根据经纬度查询
geo_bounding_box :查询 geo_point值落在某个矩形范围的所有文档
查询 Top_left 和bottom_right之间 的文档
geo_distance :查询到指定点为中心 距离小于某个值(distance)的所有文档
复合查询
在将其他简单查询结合起来,实现更复杂的搜索逻辑
Function score :算法函数查询,可以控制 文档 相关性算分 ,控制 文档排名
相关性算分 :搜索结果 与搜索词条关联打分(_score)
TF-IDF算法 : 频率 * 权重
BM25算法 : es 5.0之后
相比较 TF—IDF 得分 会更加平滑
Function score Query : 可以修改相关性算分 。根据新得到的算法排序

Boolean Query (与或非)
布尔查询是一个活多个查询子句的组合。 子查询组合方式有 :
must:必须匹配每个子查询,类似“与”
should:选择性匹配子查询,类似“或〞
must_not:必须不匹配,不参与算分,类似“非”
filter:必须匹配,不参与算分
搜索结果处理(排序、分页、高亮)
排序
对搜索结果进行排序 ,默认按照(_socre)来排序 可以排序的子字段有 :keyword 、数值、GEO、日期 等
分页
ES默认只返回TOP10的数据 。需要查询更多数据则需要修改分页参数
ES 通过 from size 来控制 分页
ES 由于 是倒排索引 所以分页需要查询出 前面所有的数据 比如 from 990 siez 10 则要 查出 1000 条数据 再截取 10条
问题 :ES是分布式的,会导致深度分页问题 ,找每个分片 的 前 1000数据 ,再合并 找出 前1000 。会对性能有很大影响
ES设定的 结果集上限是10000
深度分页解决方案
Search after : 分页时需要排序。从上一次排序位置开始查询下一页,缺点:只能向后翻页 。 官方推荐
Scroll :将排序数据形成快照 。保存在 内存 。 缺点 :耗内存,并且数据可能不是最新
高亮
将搜索结果中的关键字突出显式
原理 :
将关键字有标签标记出来 ,再页面中给标签添加css样式
highlight 高亮:
数据聚合
聚合可惜实现对文档数据的统计、分析、运算。 聚合常见有三类
桶聚合(bucket):用来对文档分组
TermAddregation:按文档字段值分组
Date histogram: 按日期阶梯分组
Size : 聚合结果数量
Order :结果排序方式
Field:指定聚合字段
Query可以先定聚合的范围(查询条件)
度量聚合(Metric):用来计算数值:最大值、最小值、平均值等
在brandAgg 内部使用 aggs 即可使用度量聚合
管道聚合(pipeline)
以其他聚合的结果再做聚合
自动补全
自定义分词器
elasticsearch中分词器 (analvzer)的组成包含三部分:
character filters:在tokenizer之前对文本进行处理。例如删除字符、替换字符
**tokenizer:**将文本按照一定的规则切割成词条(term)。例如keyword,就是不分词;还有ik smart
**tokenizer filter:**將tokenizer输出的词条做进一步处理。例如大小写转换、同义词处理、拼音处理等
我们在创建索引库时,通过settings来配置自定义的 analyzer(分词器)

如何使用拼音分词器?
- 下载pinyin分词器
- 解压并放到elasticsearch的plugin目录
- 重启即可
如何自定义分词器?
创建索引库时,在settings中配置,可以包含三部分
character filter.
tokenizer
Afilter
completion suggester 自动补全
completion suggester 查询 实现了自动补全功能
此查询会匹配用户输入开头词条并返回
参与查询的字段 必须是:completion类型
字段内容一般是用来补全的多个词条形成的数组

相关文章:
ElasticSearch总结
ES是什么 ES是一个天生支持分布式的搜索、聚合分析的存储引擎 基于Java开发 基于Lucene的开源分布式搜索引擎 ELK : elasticSearch Logstah Kibana 加入 Beats 后 ELK 改为 :Elastic stack ES解决了什么问题 ES解决的核心问题 : 1.海量数…...
手写数字识别之损失函数
目录 交叉熵 手写数字识别之损失函数 分类任务的损失函数 Softmax函数 交叉熵的简单理解:真实分布与非真实分布的交叉,完全对应,熵为0 交叉熵的代码实现 交叉熵 给定一个策略, 交叉熵就是在该策略下猜中颜色所需要的问题的期望值。更普…...
sleep () 和 wait () 有什么区别?
在Java中,sleep() 和 wait() 是两个用于处理多线程的方法,它们具有不同的作用和用途。 sleep(): sleep() 是 Thread 类的一个静态方法,用于暂停当前线程的执行一段指定的时间。它会阻塞当前线程,不会让其他线程获得执…...
第一百二十七回 空安全
文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了级联操作符相关的内容,本章回中将介绍 空安全.闲话休提,让我们一起Talk Flutter吧。 概念介绍 在编译语言中都有空指针或者空对象(null),它们会引起程序的异常。在移动开发中如果…...
js判断类型:typeof Object.prototype.toString instanceof constructor有什么区别?一文讲清楚
相信很多小伙伴在使用js的过程中,经常会需要对js的数据类型进行判断,而js中可以对数据类型进行判断的方法有很多种,最常见的有typeof、Object.prototype.toString、instanceof、constructor这四种,那么他们有什么区别呢࿱…...
uview ui 1.x ActonSheet项太多,设置滚动
问题:ActionSheet滚动不了。 使用uview ui :u-action-sheet, 但是item太多,超出屏幕了, 查了一下文档,并没有设置滚动的地方。 官方文档:ActionSheet 操作菜单 | uView - 多平台快速开发的UI框架 - uni-a…...
信息化发展2
信息系统生命周期 1 、软件的生命周期通常包括:可行性分析与项目开发计划、需求分析、概要设计、详细设计、编码、测试、维护等阶段。 2 、信息系统的生命周期可以简化为:系统规划(可行性分析与项目开发计划),系统分析…...
ubuntu18 + ros2 eloquent +python3.6
卸载 sudo systemctl stop ros2-eloquent-* #输入以下命令以停止所有ROS 2 Eloquent相关的进程 sudo apt remove ros-eloquent-* #输入以下命令以卸载ROS 2 Eloquent软件包 ls /etc/ros/ ls /opt/ros/ sudo rm -rf /opt/ros/eloquent#输入以下命令以删除ROS 2 Eloquent的配置文…...
围棋与育种
最近因为娃子报名了围棋课,我本着交一次课学两个人的态度,入门围棋,买了些书,听了些课,有所得。学了两个多月,现在6级水平,了解了基本的攻杀技巧,会判断输赢。 下面截图是今天的一盘…...
Python第三方库纵览
Python第三方库纵览 知识点 更广泛的Python计算生态,只要求了解第三方库的名称,不限于以下领域: 网络爬虫、数据分析、文本处理、数据可视化、用户图形界面、机器学习、Web开发、游戏开发等 知识导图 1、网络爬虫方向 网络爬虫是自动进行HTTP访问并捕…...
测试.net开源音频库NAudio
微信公众号“dotNET跨平台”看到一篇文章《【.NET】使用NAudio实现录音功能》介绍基于NAudio实现录音功能(参考文献1)。NAudio是开源.net音频库,其支持播放多种格式的音频(WAV、AIFF、MP3、WMA等)、音频格式转换、录音…...
三方接口调用设计方案
在为第三方系统提供接口的时候,肯定要考虑接口数据的安全问题,比如数据是否被篡改,数据是否已经过时,数据是否可以重复提交等问题 在设计三方接口调用的方案时,需要考虑到安全性和可用性。以下是一种设计方案的概述&a…...
OLED透明屏全贴合技术:未来显示技术的突破性创新
在现代科技发展的浪潮中,OLED透明屏全贴合技术以其独特的优势和无限的应用前景引起了广泛的关注。 在这篇文章中,尼伽将深入探索OLED透明屏全贴合技术,介绍其优势和特点,并展望其在不同领域的应用前景。 一、OLED透明屏全贴合技术…...
map、sync.map、concurrent-map适用场景与源码解析
最近一直加班,无论工作日还是周末,虽然每天很忙但总感觉空空的,很少有时间停下来思考与总结。项目中各种甩锅,最后最苦逼的还是落到了研发的头上,文档编写、环境部署、问题排查虐得一遍又一遍。事情杂乱,研…...
分布式事物实现方案及优缺点
实现分布式事务是一个复杂的任务,涉及到许多技术和概念。在Java开发中,你可以借助一些框架和工具来实现分布式事务,以下是一些常见的方法: 1.两阶段提交(2PC) 这是一种经典的分布式事务处理方法。它涉及到…...
java使用@interface和反射来动态生成excel
1、对象类上搞注解 public class ReportExecuteDetailDto { // 项目信息 private String regionCode; // 大区编号 ExcelColumn(order 0, title "大区") private String regionName; // 大区名称 ExcelColumn(order 14, tit…...
【微服务】04-Polly实现失败重试和限流熔断
文章目录 1. Polly实现失败重试1.1 Polly组件包1.2 Polly的能力1.3 Polly使用步骤1.4 适合失败重试的场景1.5 最佳实践 2.Polly实现熔断限流避免雪崩效应2.1 策略类型2.2 组合策略 1. Polly实现失败重试 1.1 Polly组件包 PollyPolly.Extensions.HttpMicrosoft.Extensions.Htt…...
如何使用HTML5新增的标签来构建语义化的页面结构?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ <header>:⭐ <nav>:⭐ <main>:⭐ <section>:⭐ <article>:⭐ <aside>:⭐ <footer>:⭐ <figure> 和 &l…...
Vmware 虚拟机挂起恢复后发现无法 Ping 通,无法连接到主机
解决办法 进入对应主机中,切换到 root 账户,重启网络服务。 systemctl stop NetworkManager systemctl restart network在网上还找到了另一种解决方法: 在网卡配置文件中增加参数 NM_CONTROLLED"no"。 在 Centos 7 中修改如下所…...
Web自动化测试之图文验证码的解决方案
对于web应用程序来讲,处于安全性考虑,在登录的时候,都会设置验证码, 验证码的类型种类繁多,有图片中辨别数字字母的,有点击图片中指定的文字的,也有算术计算结果的,再复杂一点就是滑…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...
