Elasticsearch 安装与使用

Elasticsearch 7.7.1

1. 简介

Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。
ES 的底层是开源库 Lucene,是对 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。

2. 主要概念

2.1 Node 与 Cluster

Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例。单个 Elastic 实例称为一个节点(node)。一组节点构成一个集群(cluster)。

2.2 Index

ES 会索引所有字段,经过处理后写入一个反向索引(Inverted Index)。查找数据的时候,直接查找该索引。所以,ES 数据管理的顶层单位就叫做 Index(索引)。它是单个数据库的同义词。每个 Index (即数据库)的名字必须是小写。

2.3 Document

Index 里面单条的记录称为 Document(文档),许多条 Document 构成了一个 Index。Document 使用 JSON 格式表示。
同一个 Index 里面的 Document,不要求有相同的结构(scheme),但是最好保持相同,这样有利于提高搜索效率。

2.4 Type

Document 可以分组,比如weather这个 Index 里面,可以按城市分组(北京和上海),也可以按气候分组(晴天和雨天)。这种分组就叫做 Type,它是虚拟的逻辑分组,用来过滤 Document。
根据规划,Elastic 6.x 版只允许每个 Index 包含一个 Type,7.x 版将会彻底移除 Type。

2.5 Shard

分片是单个 Lucene 实例。
当有大量的文档时,由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等,一个节点可能不够。这种情况下,数据可以分为较小的分片。每个分片放到不同的服务器上。
当你查询的索引分布在多个分片上时,ES会把查询发送给每个相关的分片,并将结果组合在一起,而应用程序并不知道分片的存在。即:这个过程对用户来说是透明的。

2.6 Replica

副本是一个分片的精确复制,每个分片可以有零个或多个副本。ES中可以有许多相同的分片,其中之一被选择更改索引操作,这种特殊的分片称为主分片。
当主分片丢失时,如:该分片所在的数据不可用时,集群将副本提升为新的主分片。

2.7 与数据库概念对比

Elasticsearch 安装与使用

  1. 一个数据库(Database),相当于ES中的一个索引(Index)
  2. 一个数据库下有N张表(Table),相当于ES中一个索引下面有N多类型(Type)
  3. 一张表(Table)下有多个行(Row)多个列(Column),相等于ES中一个类型(Type)下有多个文档(Document)和多个Field
  4. 数据库中Schema定义了表,每个表的字段,还有表与字段间的关系。在ES中,Mapping 定义索引(Index)下的类型(Type)的字段(Field)处理规则,即索引如何建立、索引类型、是否保存原始索引JSON文档、是否压缩原始JSON文档、是否需要分词处理、如何进行分词处理等
  5. 在数据库中的增INSERT、删DELETE、改UPDATE、查SELECT操作,相当于ES中的增PUT/POST、删DELETE、改UPDATE、查GET

3. 安装与配置

Elasticsearch 官网下载

ES不能使用root用户启动,所以创建一个新用户essearch,然后将压缩包解压在该用户目录下。
若未特别说明,都在 config/elasticsearch.yml 配置文件中修改。

修改集群名和节点名。

ES本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 ES 实例。
单个 ES 实例称为一个节点(node)。一组节点构成一个集群(cluster)。

Elasticsearch 安装与使用
默认情况下,Elastic 只允许本机访问。这里只用于测试,所有改成0.0.0.0。
Elasticsearch 安装与使用
启动 bin/elasticsearch

这里启动后出现三个错误
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
切换root用户,修改 /etc/security/limits.conf
Elasticsearch 安装与使用
然后登出essearch再登录。使用ulimit –Hn验证是否是65535

[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
切换root用户,修改 /etc/sysctl.conf 文件,添加一行 vm.max_map_count=262144
然后执行命令 sysctl -p 生效

[3]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
修改 config/elasticsearch.yml,添加上节点
Elasticsearch 安装与使用
再启动,访问 ip:9200 验证启动成功
Elasticsearch 安装与使用

4. 安装 Kibana

Kibana 官网下载

修改conf/kibana.yml
修改server.host,这里用于测试,改成0.0.0.0。
Elasticsearch 安装与使用
添加ES地址
Elasticsearch 安装与使用
启动 bin/kibana

5. 安装中文分词插件ik

GitHub 下载
在ES的plugins文件夹下创建 ik 文件夹,然后解压到 ik 文件夹中。
重启ES,通过日志,可看到加载了 ik
Elasticsearch 安装与使用

在 Kibana 中 Dev Tools 中进行测试。

未使用ik
Elasticsearch 安装与使用
Elasticsearch 安装与使用
使用ik_smart
ik_smart 会做最粗粒度的拆分,适合 Phrase 查询。
Elasticsearch 安装与使用
Elasticsearch 安装与使用
使用ik_max_word
ik_max_word 会将文本做最细粒度的拆分,会穷尽各种可能的组合,适合 Term Query;
Elasticsearch 安装与使用
Elasticsearch 安装与使用

6. 测试

在 Kibana 中 Dev Tools 中进行测试。

创建索引和Mapping
这里使用PUT创建索引student;使用POST创建mapping,指定属性name和address使用ik_max_word分词。
Elasticsearch 安装与使用
新增数据
使用PUT新增三条数据。
Elasticsearch 安装与使用
根据id更新数据
Elasticsearch 安装与使用
根据id查询单条数据
Elasticsearch 安装与使用
Elasticsearch 安装与使用
查询索引全部数据
Elasticsearch 安装与使用
Elasticsearch 安装与使用
年龄条件查询索引数据
Elasticsearch 安装与使用
Elasticsearch 安装与使用
年龄和地址条件查询索引数据
Elasticsearch 安装与使用
Elasticsearch 安装与使用
删除单个索引数据
Elasticsearch 安装与使用

删除索引
Elasticsearch 安装与使用

参考:
ES官方文档
全文搜索引擎 Elasticsearch 入门教程
Elasticsearch简介与实战
搜索引擎选择: Elasticsearch与Solr
Elasticsearch的由来、原理及应用场景分析
Elasticsearch-基础介绍及索引原理分析