1. 前言
只供参考
为什么使用ElasticSearch?
现在是在市场上应用最广泛 最热门 全文搜索引擎有 ElasticSearch 、 Solr 这两种
ElasticSearch 、 Solr 现在社区都很活跃;
以下表格看下两个搜索引擎的区别于优势
Solr | ElasticSearch | |
---|---|---|
诞生时间 | 2004 | 2010 |
底层 | 采用Java开发 基于Lucene | 采用Java开发,基于Lucene |
实时建立索引 | Solr 会产生IO 阻塞,效率低 | 不阻塞,效率高 |
实时添加数据 | 检索效率变低 | 检索效率变化不大 |
分布式管理 | 利用zookeeper进行分布式管理 | 自身带有分布式管理,天生分布式 |
部署 | 需要部署到web容器上 如tomcat | 自身携带运行功能 |
支持索引方式 | HTML、PDF、JSON、XML、CSV等等 | 仅支持JSON |
社区 | Apache 社区 | Elasticsearch和其他软件的公司 |
使用难度 | 复杂,部署复杂需要使用zookeeper 来自做到分布式 | 简单、易于使用、上手快, 快速部署 |
专注方向 | 文本搜索 | 搜索 +数据分析 |
2. 简介
ElasticSearch 是一个建立在Lucene基础上的搜索引擎.
ElasticSearch 是一个实时分布式和开源的全文搜索和分析引擎.
ElasticSearch 是面向文档的,ElasticSearch 不仅仅存储文档而且索引每个文档的内容,使之可以被检索。
ElasticSearch 使用JSON 作为文档的序列化格式,JSON 更简单、简洁和容易阅读。
MySQL 使用B+Tree 的索引结构提升数据检索速度,而ElasticSearch 使用 倒排索引 的结构来达到相同的目的。
3. 优势
- 天生分布式 集群扩容无缝整合新节点
- 索引拆分多个分片 ,每个片可能有0-多个副本
- 集群可扩展上百台服务器, 处理PB级别的结构化/非结构化的数据
- 支持插件机制.分词插件、同步插件、可视化插件等
- 比solr 更加轻量级
4. 核心概念
4.1 逻辑层面
- (1) 索引 index
ElasticSearch 中 索引 Index 类似于 mysql中的数据库,主要存储用户文档数据.
- (2) 类型type
ElasticSearch 中 type类型 是 类似于mysql 中的表 ,每个文档都属于一种type类型,如果没有定义 会有默认值, 每个Index索引包含很多type类型。
注意: 同一索引下,不同type的数据存储其他type的field 大量空值,造成资源浪费。
所以,不同类型数据,要放到不同的索引中。
ElasticSearch9中,将会彻底删除type。
- (3) 文档Document
ElasticSearch 中 Documetn文档是实际的数据主体, 相当于Mysql表中的一条数据, ES的所有操作都是建立在文档上的,每个文档有各种Filed组成,文档可以理解为一个JSON 对象
- (4) 字段Filed
每个文档中包含多个Filed 类似于Mysql 表中的列表, 每个字段的所有数据都是默认被索引的,专门设置了倒排索引
- (5)映射Mapping
映射 用户定义Filed的属性 ,如字段类型 是否分词等.
4.2 物理层面
- (1)集群Cluster
ElasticSearch 集群, ElasticSearch天生是分布式,天生支持集群部署.
- (2)节点Node
在集群中 多个节点服务组成一个集群 , 就是一个ES 实例就是一个节点
- (3)分片Shard
分片是数据的容器, 文档被保存在分片中,分片是分配到集群内的各个节点里的, 当集群规模扩大或者缩小时,ElasticSearch 会自动的在各个节点中迁移分片,使数据均匀的分布在集群里. 创建索引的时候可以指定分片数量,默认是5个.
分片 Shard因为ES是分布式架构,类似于HDFS的存储方式,所以数据被打散存储在集群的多个节点上,一个分片实际上就是底层Lucene的一个索引,这里说的分片指的是ES中的主分片(因为还有副本分片一说),分片的方式是ES自动完成,用户可以指定分片的数量,主分片一旦指定就不能修改,因为ES打散数据的方式是和索引创建时指定的主分片数量有关(参考公式:shard = hash(routting) % number_of_primary_shards进行文档分配),后期改变会导致分片中的数据不可搜索。
一个分片是一个底层的工作单元,它只是保存了全部数据的一部分
- (4)副本Replia
副本就是分片的一个拷贝,作为故障时保护数据不丢失的备份数据.
另外,请求量很大的情况下,副本可以分担主Shard压力,承担查询功能。副本个数还以在创建完索引后灵活调整
这里需要知道集群环境下拥有越多的副本分片,也将拥有越高的吞吐量.
5. ElasticSearch安装 (linux环境)
安装教程地址:
https://blog.csdn.net/qq825478739/category_11825929.html