目录
1.ES简介
Elasticsearch 是一个基于 Lucene 的开源搜索引擎,它提供了全文搜索、分析和数据索引的功能。Elasticsearch 通常与 Logstash(一个服务器端数据处理管道)、Kibana(一个开源的数据可视化工具)一起使用,这三个工具合称为 ELK Stack。随着 Beats(一个轻量级的日志和指标收集器)的加入,现在通常称为 Elastic Stack。
elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监控等领域:
而ES能够被广泛使用,有一个最核心的原因就是因为ES底层采用的倒排索引。
什么是倒排索引?
倒排索引中有两个非常重要的概念:
- 文档(
Document
):用来搜索的数据,其中的每一条数据就是一个文档。例如一个网页、一个商品信息 - 词条(
Term
):对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语就是词条。例如:我是中国人,就可以分为:我、是、中国人、中国、国人这样的几个词。
创建倒排索引是对正向索引的一种特殊处理,流程如下:
- 将每一个文档的数据利用算法分词,得到一个个词条
- 创建表,每行数据包括词条、词条所在文档id、位置等信息
- 因为词条唯一性,可以给词条创建索引,例如hash表结构索引
当用户开始模糊搜索时,首先是查询词条,因为每个词条都绑定了文章id,所以再根据文档id查询到本来的文档,这样一个流程就是倒排索引。
正向和倒排的对比:
-
正向索引是最传统的,根据id索引的方式。但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程。
-
而倒排索引则相反,是先找到用户要搜索的词条,根据词条得到保护词条的文档的id,然后根据id获取文档。是根据词条找文档的过程。
优缺点:
正向索引:
- 优点:
- 可以给多个字段创建索引
- 根据索引字段搜索、排序速度非常快
- 缺点:
- 根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描。
倒排索引:
- 优点:
- 根据词条搜索、模糊搜索时,速度非常快
- 缺点:
- 只能给词条创建索引,而不是字段
- 无法根据字段做排序
2.ES安装
你可以直接去官网进行下载,或者利用docker pull 但是es很大,如果网络不好很容易失败,这里我把es放进网盘里,有需要的可以直接下载
链接:https://pan.baidu.com/s/1JVe89Sv32yXVdiaRqLGEbA?pwd=jvop
提取码:jvop
下载到本地以后,上传到你的虚拟机里,然后利用下面的命令:
docker run -d \
--name es \
--restart always \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \
-v es-data:/usr/share/elasticsearch/data \
-v es-plugins:/usr/share/elasticsearch/plugins \
--privileged \
--network hm-net \
-p 9200:9200 \
-p 9300:9300 \
elasticsearch:7.12.1
命令解释:
-e "cluster.name=es-docker-cluster"
:设置集群名称-e "http.host=0.0.0.0"
:监听的地址,可以外网访问- -- restart always 开机重启
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"
:内存大小-e "discovery.type=single-node"
:非集群模式-v es-data:/usr/share/elasticsearch/data
:挂载逻辑卷,绑定es的数据目录-v es-logs:/usr/share/elasticsearch/logs
:挂载逻辑卷,绑定es的日志目录-v es-plugins:/usr/share/elasticsearch/plugins
:挂载逻辑卷,绑定es的插件目录--privileged
:授予逻辑卷访问权--network es-net
:加入一个名为es-net的网络中-p 9200:9200
:端口映射配置
启动完成以后,直接在浏览器端口内输入你的ip端口号:9200,出现下面的结果,说明安装成功
为了方便操作我们还需要安装Kibana可视化平台
同样的网盘提供了kibana的安装包有需要可以去下载
链接:https://pan.baidu.com/s/1iotKpmwjxJDV4lR-V7Xp2A?pwd=2drg
提取码:2drg
下载好上传到虚拟机,解压,输入下面命令
docker run -d \
--name kibana \
--restart always \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=hm-net \
-p 5601:5601 \
kibana:7.12.1
然后浏览器输入ip端口:5601出现下方界面即安装运行成功。
3.IK分词器
IK分词器是一个基于Java语言开发的轻量级的中文分词工具包,它结合了词典分词和文法分析算法,适用于Elasticsearch等全文检索系统,以提高中文文本处理的效率和准确性
有两种方式安装IK分词器
1.直接命令窗口安装
docker exec -it elasticsearch /bin/bash 进入安装好的es容器
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.9.2/elasticsearch-analysis-ik-7.9.2.zip 注意安装的ik分词器版本一定要和ES版本保持一致
但是命令行方式如果网络不好很容易失败
2.文件夹直接拖入
直接去github官网下载IK分词器的文件夹,拖入ES的插件文件夹目录,然后重启ES即可
至于如何找到es的插件目录,可以按我下面的步骤来:
docker volume inspect es-plugins
显示结果:
[
{
"CreatedAt": "2022-05-06T10:06:34+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/es-plugins/_data",
"Name": "es-plugins",
"Options": null,
"Scope": "local"
}
]
这个Mountpoint后面的就是插件目录
安装好后重启es
docker restart es
同时IK文件加下面有个config文件夹
里面有个IKAnalyzer的文件,这个文件主要是用于扩展词汇和停用,打开后如下方:
4.利用Kibana的Devops平台进行相关的ES操作
说道操作,就必须先说一下es的索引和映射,以及和mysql的不同
索引就像数据库里的表,映射就像数据库中定义的表结构
- 所有用户文档,就可以组织在一起,称为用户的索引;
- 所有商品的文档,可以组织在一起,称为商品的索引;
- 所有订单的文档,可以组织在一起,称为订单的索引;
在ES中Mapping映射关系分为以下几种:
mapping是对索引库中文档的约束,常见的mapping属性包括:
-
type:字段数据类型,常见的简单类型有:
-
字符串:text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)
keyword类型只能整体搜索,不支持搜索部分内容
-
数值:long、integer、short、byte、double、float、
-
布尔:boolean
-
日期:date
-
对象:object
-
-
index:是否创建索引,默认为true
-
analyzer:使用哪种分词器
-
properties:该字段的子字段
下面我将给出利用Kibana的Devops平台给出具体的代码示例: