概念
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。
相关的概念
- Lucene:由Java语言编写的一套实现全文检索的开源引擎工具包,属于Apache公司
- 全文检索:先创建索引库,再根据索引库进行搜索的过程
- 索引库:存储索引的数据库 — 数据于数据库
- 倒排索引:先对文档进行分词,形成词条与文档ID及词条与文档ID的对应关系,再通过词条查询到文档的过程
与数据库进行对比
MySQL数据库
- 如果使用模糊查询,左边有通配符,不会走索引,会全表扫描,性能低
- 查询功能弱,没有分词,如果以”华为手机“作为条件,查询不到数据“华为5G手机”
- 有事务性,有外键
- 负责存储数据
ElasticSearch
- 搜索性能高,功能强,可以分词
- 没有事务性,没有外键
- 负责搜索数据
结论
- MySQL有事务性,而ElasticSearch没有事务性,所以删了的数据是无法恢复的。
- ElasticSearch没有物理外键这个特性,,如果数据强一致性要求比较高,还是建议慎用
- ElasticSearch和MySql分工不同,MySQL负责存储数据,ElasticSearch负责搜索数据
ElasticSearch安装
windows安装
百度百科有个以windows操作系统和ES0.19.7版本为例的安装步骤,可以参考
linux系统安装
上传ElasticSearch安装包
alt+p # 打开sftp窗口
# 上传es安装包
put e:/software/elasticsearch-7.4.0-linux-x86_64.tar.gz
执行解压操作
# 将elasticsearch-7.4.0-linux-x86_64.tar.gz解压到opt文件夹下. -C 大写
tar -zxvf elasticsearch-7.4.0-linux-x86_64.tar.gz -C /opt
创建普通用户
因为安全问题,Elasticsearch 不允许root用户直接运行,所以要创建新用户,在root用户中创建新用户,执行如下命令:
useradd wanyuan # 新增wanyuan用户
passwd wanyuan # 为wanyuan用户设置密码
为新用户授权
# 将 /opt/elasticsearch-7.4.0文件夹授权给wanyuan用户
chown -R wanyuan:wanyuan /opt/elasticsearch-7.4.0 #文件夹所有者
修改elasticsearch.yml文件
vim /opt/elasticsearch-7.4.0/config/elasticsearch.yml
# ======================== Elasticsearch Configuration =========================
cluster.name: my-application
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
cluster.initial_master_nodes: ["node-1"]
cluster.name:配置elasticsearch的集群名称,默认是elasticsearch。建议修改成一个有意义的名称
node.name:节点名,elasticsearch会默认随机指定一个名字,建议指定一个有意义的名称,方便管理
network.host:设置为0.0.0.0允许外网访问
http.port:Elasticsearch的http访问端口
cluster.initial_master_nodes:初始化新的集群时需要此配置来选举master
修改配置文件
# 新创建的wanyuan用户最大可创建文件数太小,最大虚拟内存太小,
# 切换到root用户,编辑下列配置文件, 添加类似如下内容
# 切换到root用户
su root
#1. ===最大可创建文件数太小=======
vim /etc/security/limits.conf
# 在文件末尾中增加下面内容
wanyuan soft nofile 65536
wanyuan hard nofile 65536
# =====
vim /etc/security/limits.d/20-nproc.conf
# 在文件末尾中增加下面内容
wanyuan soft nofile 65536
wanyuan hard nofile 65536
* hard nproc 4096
# 注:* 代表Linux所有用户名称
#2. ===最大虚拟内存太小=======
vim /etc/sysctl.conf
# 在文件中增加下面内容
vm.max_map_count=655360
# 重新加载,输入下面命令:
sysctl -p
启动elasticsearch
su wanyuan # 切换到wanyuan用户启动
cd /opt/elasticsearch-7.4.0/bin
./elasticsearch #启动
访问elasticsearch
在访问elasticsearch前,请确保防火墙是关闭的,执行命令:
#暂时关闭防火墙
systemctl stop firewalld
# 或者
#永久设置防火墙状态
systemctl enable firewalld.service #打开防火墙永久性生效,重启后不会复原
systemctl disable firewalld.service #关闭防火墙,永久性生效,重启后不会复原
浏览器输入http://192.168.149.135:9200/,如下图
此时elasticsearch已成功启动:
重点几个关注下即可:
number" : "7.4.0" 表示elasticsearch版本
lucene_version" : "8.2.0" 表示lucene版本
name : 默认启动的时候指定了 ES 实例名称
cluster_name : 默认名为 elasticsearch
核心概念
- 索引(index):ElasticSearch存储数据的地方,可以理解成关系型数据库中的数据库概念。
- 映射(mapping):mapping定义了每个字段的类型、字段所使用的分词器等。相当于关系型数据库中的表结构。
- 文档(document):Elasticsearch中的最小数据单元,常以json格式显示。一个document相当于关系型数据库中的一行数据。
- 倒排索引:一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,对应一个包含它的文档id列表。
- 类型(type):
- 一种type就像一类表。如用户表、角色表等。
- ES 5.x中一个index可以有多种type。
- ES 6.x中一个index只能有一种type。
- ES 7.x以后,将逐步移除type这个概念,现在的操作已经不再使用,默认_doc
RESTful风格
- REST(Representational State Transfer),表述性状态转移,是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是RESTful。就是一种定义接口的规范。
- 基于HTTP。
- 可以使用XML格式定义或JSON格式定义。
- 每一个URI代表1种资源。
- 客户端使用GET、POST、PUT、DELETE 4个表示操作方式的动词对服务端资源进行操作:
- GET:用来获取资源
- POST:用来新建资源(也可以用于更新资源)
- PUT:用来更新资源
- DELETE:用来删除资源