当前位置:网站首页>初识ElastricSearch
初识ElastricSearch
2022-06-22 10:56:00 【InfoQ】
- 一个分布式的实时文档存储,每个字段可以被索引与搜索;
- 一个分布式实时分析搜索引擎;
- 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据。
一、结构化数据、非结构化数据
- 顺序扫描:即按照顺序扫描的方式查询特定的关键字。例如给你一张报纸,让你找到该报纸中“阿Q”的文字在哪些地方出现过。你肯定需要从头到尾把报纸阅读扫描一遍然后标记出关键字在哪些版块出现过以及它的出现位置。这种方式无疑是最耗时的最低效的。
- 全文搜索:将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构(这种结构,我们称之为索引),然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。这种方式的主要工作量在前期索引的创建,但是对于后期搜索却是快速高效的。
二、Lucene
- Java is the best programming language.
- PHP is the best programming language.
- Javascript is the best programming language.


- 词条(Term):索引里面最小的存储和查询单元,对于英文来说是一个单词,对于中文来说一般指分词后的一个词。
- 词典(Term Dictionary):或字典,是词条 Term 的集合。搜索引擎的通常索引单位是单词,单词词典是由文档集合中出现过的所有单词构成的字符串集合,单词词典内每条索引项记载单词本身的一些信息以及指向“倒排列表”的指针。
- 倒排表(Post list):一个文档通常由多个词组成,倒排表记录的是某个词在哪些文档里出现过以及出现的位置。每条记录称为一个倒排项(Posting)。倒排表记录的不单是文档编号,还存储了词频等信息。
- 倒排文件(Inverted File):所有单词的倒排列表往往顺序地存储在磁盘的某个文件里,这个文件被称之为倒排文件,倒排文件是存储倒排索引的物理文件。
三、ES中的概念解释
四、ES 集群的选举原理
node.master: true //是否候选主节点
node.data: true //是否数据节点
配置较低Zen DiscoveryZen DiscoveryZen Discovery单播discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]
conf/elasticsearch.yml:
discovery.zen.minimum_master_nodes: 2
- 该master-eligible节点的当前状态不是master;
- 该master-eligible节点通过ZenDiscovery模块的ping操作询问其已知的集群其他节点,没有任何节点连接到master;
- 包括本节点在内,当前已有超过minimum_master_nodes个节点没有连接到master;
- 如果Node_B已经成为Master,Node_B就会把Node_A加入到集群中,然后发布最新的cluster_state, 最新的cluster_state就会包含Node_A的信息,相当于一次正常情况的新节点加入。对于Node_A,等新的cluster_state发布到Node_A的时候,Node_A也就完成join了。
- 如果Node_B在竞选Master,那么Node_B会把这次join当作一张选票。对于这种情况,Node_A会等待一段时间,看Node_B是否能成为真正的Master,直到超时或者有别的Master选成功。
- 如果Node_B认为自己不是Master(现在不是,将来也选不上),那么Node_B会拒绝这次join。对于这种情况,Node_A会开启下一轮选举。
- 网络问题:集群间的网络延迟导致一些节点访问不到 Master,认为 Master 挂掉了从而选举出新的 Master,并对 Master 上的分片和副本标红,分配新的主分片。
- 节点负载:主节点的角色既为 Master 又为 Data,访问量较大时可能会导致 ES 停止响应(假死状态)造成大面积延迟,此时其他节点得不到主节点的响应认为主节点挂掉了,会重新选取主节点。
- 内存回收:主节点的角色既为 Master 又为 Data,当 Data 节点上的 ES 进程占用的内存较大,引发 JVM 的大规模内存回收,造成 ES 进程失去响应。
- 适当调大响应时间,减少误判:通过参数 discovery.zen.ping_timeout 设置节点状态的响应时间,默认为 3s,可以适当调大。如果 Master 在该响应时间的范围内没有做出响应应答,判断该节点已经挂掉了。
- 选举触发:我们需要在候选集群中的节点的配置文件中设置参数 discovery.zen.munimum_master_nodes 的值。这个参数表示在选举主节点时需要参与选举的候选主节点的节点数,默认值是 1,官方建议取值(master_eligibel_nodes/2)+1,其中 master_eligibel_nodes 为候选主节点的个数。这样做既能防止脑裂现象的发生,也能最大限度地提升集群的高可用性,因为只要不少于 discovery.zen.munimum_master_nodes 个候选节点存活,选举工作就能正常进行;当小于这个值的时候,无法触发选举行为,集群无法使用,不会造成分片混乱的情况。
- 角色分离:即是上面我们提到的候选主节点和数据节点进行角色分离,这样可以减轻主节点的负担,防止主节点的假死状态发生,减少对主节点“已死”的误判。
边栏推荐
- 微软 Edge 浏览器 Dev 104 发布,深 / 浅主题切换更加顺畅
- HMS Core新闻行业解决方案:让技术加上人文的温度
- Redis common commands
- MAML (Model-Agnostic Meta-Learning) 解读
- Flink状态管理
- Customization scheme for DAPP system development mode of smart contract
- 关于 GIN 的路由树
- 6-10 全局状态管理 - 全局store
- Super simple C language Snake does not flash screen double buffer
- Foreign trade topic: foreign trade e-mail marketing template
猜你喜欢

嵌入式软件开发之程序架构设计-任务调度

Batch create / delete files, folders, modify file name suffixes

The first "cyborg" in the world died, and he only transformed himself to "change his life against the sky"

机器人强化学习——Sim-to-Real Robot Learning from Pixels with Progressive Nets (2017)

世界上第一个“半机械人”去世,改造自己只为“逆天改命”

Yolov3 target detection

攻防演练 | 基于ATT&CK的威胁狩猎实践案例

Flink状态管理

Intensive reading: generative adversarial imitation learning

Laravel 中类似 WordPress 的钩子和过滤器
随机推荐
Exchange sort method
线程死锁的理解
推薦一款M1芯片電腦快速搭建集群的虛擬機軟件
Leetcode algorithm Delete the node of the linked list
Interpretation of MAML (model agnostic meta learning)
原生JS动态添加和删除类
Redis 切片集群的数据倾斜分析
Using computed columns in laravel
2022陕西省安全员B证操作证考试题库及在线模拟考试
MySQL使用SQL语句修改字段长度、字段名称
2022年度敏捷教练行业现状报告(2022 State of Agile Coaching Report)
Should the theme of the IDE be bright or dark? Here comes the ultimate answer!
In depth analysis of business model of blind box software development in 2022
Duxiaoyong, head of virtual teaching and Research Office of database course: Based on the major needs of domestic databases, explore a new mode of course system construction
电装中国采用 Oracle HCM 云技术解决方案加速人力资源数字化转型
批量创建/删除文件、文件夹、修改文件名 后缀名
6-13 提高加载性能 - 应用缓存
Career development planning
scrapy.Request() 的 meta参数 数据的传递
本周四晚19:00战码先锋第7期直播丨三方应用开发者如何为开源做贡献