ElasticSearch核心概念
索引(index)
ES存储数据的地方。文档集合
(索引命名:英文数字不能包含下划线)
一个索引对应一个映射。映射表示存储数据的格式:(类似于Mysql中的数据表形式)映射又指定了数据文档的格式。
索引中指定了映射(文档的格式)
索引是文档的集合
类型(type)
一种type就是一类表。比如用户表,角色表
ES7.x默认type为_doc
映射(mapping)
指定了文档的格式
定义每个字段的类型,字段所使用的分词器,相当于关系数据库的表结构
文档(document)
ES数据最小单元,常以json格式显示。一个document相当于关系型数据库的一行数据
倒排索引
一个倒排索引由文档中所有不重复的词列表构成。
对于其中每个词,对应一个包含它的文档id列表
操作ElasticSearch
两种方式操作ES
- Restful风格:restful都是到根据不同的请求方式就可以实现不同的结果
- java的代码:使用java的api调用完成。底层也是使用请求的形式
Restful
操作索引
这里先直接展示结果
测试(postman方式)
put进行添加
get: _all查询所有
查询多个,使用逗号隔开多个索引
Kibana测试
上面通过postman进行测试,发现是没问题的
kibana有着更好的结构和提示
操作映射
简单数据类型
字符串
数值
布尔
boolean
二进制
基本上不用
binary
复杂数据类型
数组:[]
对象:{}
kibana的测试
当然内部的属性名称不是固定的
操作文档
根据上图发现四种请求方式
- POST:新增
- Get:查询
- Delete:删除
- Put:存在就更新,不存在就添加。(必须带着id)
索引中指定了映射(文档的格式)
索引是文档的集合
分词器
分词器:将一段文本,按照一定逻辑,分析成多个词语。
(比如:华为手机:华为,手,手机)
ElasticSearch内置多个分词器
ElasticSearch内置的分词器对中文不是很友好(中文按照一个一个的拆分),所以我们接下来会介绍IK分词器
IK分词器
环境准备
ElasticSearch要使用ik,就要构建ik的jar包,这里要用到maven包管理工具,而maven需要java环境。
Elastic内置JDK,所以将JAVA_HOME设置为ElasticSearch内置的jdk
设置JAVA_HOME
进入vim编辑器
vim /etc/profile
文件的末尾添加
export JAVA_HOME=/usr/src/elasticsearch-7.4.0/jdk
export PATH=$PATH:${JAVA_HOME}/bin
保存后
重新加载该文件
source /etc/profile
安装Maven
下载Maven安装包
解压maven安装包
配置Maven
配置文件地内容
测试
安装ik分词器
下载IK
下载IK对应自己地ElasticSearch版本
wget https://github.com/medcl/elasticsearch-analysis-ik/archive/v7.4.0.zip
解压IK
由于治理是zip不是gz包,所以使用unzio命令进行解压
使用maven进行打包成jar文件
切换到
cd 解压后地目录
maven进行打包
mvn package
打包完成后
package执行完毕后会在当前目录下生成
/target/releases目录
该目录中存在一个压缩文件。
下面就是操作该文件即可
将压缩解压后地配置文件放入ElasticSearch中
视频地解释操作在这里
重启elasticSearch测试
加载日志可以发现加载进入了Ik插件
有关于日志异常可以不用去管
测试ik分词器
存在两种模式
- ik_smart:粗粒度
- ik_max_word:细粒度
查询文档
这里的操作性很多。
使用Kibana进行发送命令,更加友好,有着提示等功能
创建索引,指定分词器
如果添加文档时候带入了,映射没有指定的数据
会进行动态的生成映射。但是还是不值得推荐这么写
term查询
查询的条件字符串和词条完全匹配
match查询
会将差选条件进行分词查询。
再去查询出现的交集
这两个查询需要在多个示例中找到规律。不过看意思也是能感觉出来的。
只是这里我没有展示很多的示例图