elasticsearch8.x知识梳理
文章目录
概述
elasticsearch,简称为 ES, ES 是一个开源的支持分布式的全文搜索、聚合分析和存储引擎, 是整个 ElasticStack 技术栈的核心。
它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别的数据。
es是解决海量数据全文检索的不二之选。
- 搜索 、 聚合分析 、 大数据存储
- 分布式 、 高性能 、 高可用 、 可伸缩 、 易维护
- 支持文本搜索 、 结构化数据 、 非结构化数据 、地理位置搜索等
数据库对比
- MongoDB擅长对数据的管理,支持事务;es通过牺牲写入性能换取查询效率,把检索做到极致
es应用场景:
- 搜索引擎
- 电商平台
- 导航、打车、外卖软件
- 音视频软件
- github
- elk日志系统
- 站内搜索
全文搜索引擎工作原理
全文搜索引擎工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。
正排索引 VS 倒排索引:
正排索引(传统)
id | content |
---|---|
1001 | my name is zhang san |
1002 | my name is li si |
倒排索引
keyword | id |
---|---|
name | 1001, 1002 |
zhang | 1001 |
Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档。 为了方便大家理解,我们将 Elasticsearch 里存储文档数据和关系型数据库 MySQL 存储数据的概念进行一个类比
ES 里的 Index 可以看做一个库,而 Types 相当于表, Documents 则相当于表的行。这里 Types 的概念已经被逐渐弱化, Elasticsearch 6.X 中,一个 index 下已经只能包含一个type, Elasticsearch 7.X 中, Type 的概念已经被删除了。
核心概念
节点Node
一个节点就是一个ES的实例,可以理解为一个ES进程。
一个节点不等于一台服务器
角色role
在分布式架构中起重要作用
- active master: 活跃的节点,一个集群中只有一个,主要作用是对集群的管理
- mater-eligible: 候选节点,当主节点
- data 数据节点
- data-content: 数据内容节点
- data_hot : 热节点
- data_warm: 索引不再定期更新 , 但仍可查询
- data_code: 冷节点 , 只读索引
- ingest:预处理节点 , 作用类似于 logstash中的filter,用于数据写入前的预处理
- ml: 机器学习节点
- remote-cluster-client: 候选客户端节点
- transform : 转换节点
- voting_only: 仅投票节点
2+1高可用分布式es架构,2个master角色+1 voting_only角色
索引Index
一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母),并且当我们要对这个索引中的文档进行索引、搜索、更新和删除(CRUD)的时候,都要使用到这个名字。在一个集群中,可以定义任意多的索引。
能搜索的数据必须索引,这样的好处是可以提高查询速度,比如:新华字典前面的目录就是索引的意思,目录可以提高查询速度。
Elasticsearch 索引的精髓:一切设计都是为了提高搜索的性能。
索引的组成部分:
- alias:索引别名
- mapping:映射
- setting:索引设置
mapping 是处理数据的方式和规则方面做一些限制,如:某个字段的数据类型、默认值、分析器、是否被索引等等。这些都是映射里面可以设置的,其它就是处理 ES 里面数据的一些使用规则设置也叫做映射,按着最优规则处理数据对性能提高很大,因此才需要建立映射,并且需要思考如何建立映射才能对性能更好。
有了索引库,等于有了数据库中的 database。
接下来就需要建索引库(index)中的映射了,类似于数据库(database)中的表结构(table)。
创建数据库表需要设置字段名称,类型,长度,约束等;索引库也一样,需要知道这个类型下有哪些字段,每个字段有哪些约束信息,这就叫做映射(mapping)
类型Type
在一个索引中,你可以定义一种或多种类型。
一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具
有一组共同字段的文档定义一个类型。不同的版本,类型发生了不同的变化。
版本 Type
5.x 支持多种 type
6.x 只能有一种 type
7.x 默认不再支持自定义索引类型(默认类型为: _doc)