点一下关注吧!!!非常感谢!!持续更新!!!
目前已经更新到了:
Hadoop(已更完)HDFS(已更完)MapReduce(已更完)Hive(已更完)Flume(已更完)Sqoop(已更完)Zookeeper(已更完)HBase(已更完)Redis (已更完)Kafka(已更完)Spark(已更完)Flink(已更完)ClickHouse(已更完)Kudu(已更完)Druid(已更完)Kylin(已更完)Elasticsearch(正在更新…)章节内容
上节我们完成了如下的内容:
ES-head 插件配置使用Kibana 插件配置使用索引操作
创建索引库
Elasticsearch采用Rest风格API,因此其API就是一次HTTP请求,你可以用任何工具来发起HTTP请求。
语法:
PUT /索引名称{ "settings": { "属性名": "属性值" }}
settings:就是索引库设置,其中可以索引库的各种属性,比如分片数、副本数等。目前我们不设置,先默认即可。
示例:
PUT /wzkicu-index
执行结果如下图:
判断索引是否存在
单个索引
语法:
GET /索引名称
示例:
GET /wzkicu-index
执行结果如下图所示:
多个索引
语法:
GET /索引名称1,2,3,4,5...
示例:
GET /wzkicu-index,wzkicu,wzk
执行结果如下图所示:(这里有不存在的索引,所以404了)
所有索引
方式1:
GET _all
执行结果如下图所示:
方式2:
GET /_cat/indices?v
执行结果如下图所示:
这里的health列,表示:
打开索引
语法:
POST /索引名称/_open
示例:
POST /wzkicu-index/_open
执行结果如下图:
关闭索引
语法:
POST /索引名称/_close
示例:
POST /wzkicu-index/_close
执行结果如下图:
删除索引
语法:
DELETE /索引名称1,2,3,4,5...
示例:
DELETE /wzkicu-index
执行结果如下图所示:
IK分词器
下载项目
官方地址在这里,是GitHub开源的项目,安装方式很多,我这里就直接用官方的方式安装了:
https://github.com/infinilabs/analysis-ik/releases/tag/Latest
页面是这样的:
安装插件
cd /opt/servers/elasticsearch-7.3.0/bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/7.3.0
执行结果如下图所示,我们需要重启ES:
重启ES
重启过程,启动完毕:
分词测试
IK分词器两种分词模式:
ik_max_word 模式 (最常用)(会将文本最细粒度的拆分)ik_smart 模式 (会做最粗粒度的拆分)暂时不细追究语法,先学习测试,再后续研究。
ik_max_word
POST _analyze{ "analyzer": "ik_max_word", "text": "山东省青岛市黄岛区"}
我们的到的结果是:
{ "tokens": [ { "token": "山东省", "start_offset": 0, "end_offset": 3, "type": "CN_WORD", "position": 0 }, { "token": "山东", "start_offset": 0, "end_offset": 2, "type": "CN_WORD", "position": 1 }, { "token": "省", "start_offset": 2, "end_offset": 3, "type": "CN_CHAR", "position": 2 }, { "token": "青岛市", "start_offset": 3, "end_offset": 6, "type": "CN_WORD", "position": 3 }, { "token": "青岛", "start_offset": 3, "end_offset": 5, "type": "CN_WORD", "position": 4 }, { "token": "市", "start_offset": 5, "end_offset": 6, "type": "CN_CHAR", "position": 5 }, { "token": "黄岛区", "start_offset": 6, "end_offset": 9, "type": "CN_WORD", "position": 6 }, { "token": "黄岛", "start_offset": 6, "end_offset": 8, "type": "CN_WORD", "position": 7 }, { "token": "区", "start_offset": 8, "end_offset": 9, "type": "CN_CHAR", "position": 8 } ]}
执行的结果如下图所示:
ik_smart
POST _analyze{ "analyzer": "ik_smart", "text": "山东省青岛市黄岛区"}
执行的结果是:
{ "tokens": [ { "token": "山东省", "start_offset": 0, "end_offset": 3, "type": "CN_WORD", "position": 0 }, { "token": "青岛市", "start_offset": 3, "end_offset": 6, "type": "CN_WORD", "position": 1 }, { "token": "黄岛区", "start_offset": 6, "end_offset": 9, "type": "CN_WORD", "position": 2 } ]}
执行的结果如下图所示:
提出问题
在实际环境中,有很多时候并不能够准确的理解我们断词断句,有时候有些词我们想要它拆分,有些词我们希望它不拆分。
那我们怎么办呢?
词典使用
扩展词
不进行分词,告诉引擎这是一个词。
停用词
有些词在文本中出现的频率非常高,但对本文的语义会产生很大的影响,例如:呢、了、啊等等,英语中也有类似于 a 、the、of 等等。这样的词称为停用词。
停用词经常会过滤掉,不会被索引,在检索过程中,如果用户的查询词中含有停用词,系统会自动过滤掉。
停用词可以加快索引的速度、减少索引库的大小。
扩展词、停用词应该统一维护,避免集群中多台导致节点各自维护自己的一份。这里我们计划使用Web的方式,将dict词库共享给分词器等。
分词服务
配置Web
我这里使用 Nginx,你也可以使用 Tomcat:
apt install nginx
安装过程如下图所示:
访问页面:http://h121.wzk.icu,可以看到Nginx顺利运行:
编写dict内容:
vim /var/www/html/stop_dict.dic
向其中写入的内容如下:
的了啊呢
同理,我们写入 ext_dict.dic:
vim /var/www/html/ext_dict.dic
我们访问对应的页面,可以拿到对应的Web文件:
配置分词器
# 这里看自己的版本 我选了好几个cd /opt/servers/elasticsearch-8.15.0/plugins/analysis-ikmkdir configvim IKAnalyzer.cfg.xml
写入如下的内容:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"><properties> <comment>IK Analyzer 扩展配置</comment> <!--用户可以在这里配置自己的扩展字典 --> <entry key="ext_dict"></entry> <!--用户可以在这里配置自己的扩展停止词字典--> <entry key="ext_stopwords"></entry> <!--用户可以在这里配置远程扩展字典 --> <entry key="remote_ext_dict">http://h121.wzk.icu/ext_dict.dic</entry> <!--用户可以在这里配置远程扩展停止词字典--> <entry key="remote_ext_stopwords">http://h121.wzk.icu/stop_dict.dic</entry></properties>
对应的截图如下所示:
重启服务
重启ES服务,测试效果。