1、安装ElasticSearch
// Step 1:高版本安装`Kibana`的时候需要和`ElasticSearch`在同一网段内,并尽量保持两个的版本一致
// 所以采用`docker`安装首先要确认网段,为了方便操作,我们直接创建一个网络,创建脚本如下:
docker network create es-net
// Step 2:Docker 安装`ElasticSearch`脚本
docker run -d \
--name elasticsearch \
-e "http.host=0.0.0.0" \
-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 \
-v es-config:/usr/share/elasticsearch/config \
--privileged \
--network es-net \
-p 9200:9200 \
-p 9300:9300 \
elasticsearch:7.12.1
//命令说明:
//- `--name elasticsearch"`:设置容器名称
//- `-e "http.host=0.0.0.0"`:监听的地址,可以外网访问
//- `-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"`:内存大小
//- `-e "discovery.type=single-node"`:非集群模式
//- `-v es-data:/usr/share/elasticsearch/data`:挂载逻辑卷,绑定`elasticsearch`的数据目录
//- `-v es-logs:/usr/share/elasticsearch/logs`:挂载逻辑卷,绑定`elasticsearch`的日志目录
//- `-v es-plugins:/usr/share/elasticsearch/plugins`:挂载逻辑卷,绑定`elasticsearch`的插件目录
//- `--privileged`:授予逻辑卷访问权
//- `--network es-net` :加入一个名为`es-net`的网络中
//- `-p 9200:9200`:向外暴露端口映射
//- `-p 9300:9300`:该节点端口映射配置,集群模式下其它节点可以根据该端口进行访问该节点
// Step 2:安装完成后访问`http://47.109.156.181:9200/`即可看到`elasticsearch`的响应结果:
//{
//"name": "faea4773fc6b",
//"cluster_name": "docker-cluster",
//"cluster_uuid": "2QUlgKGSSFSs9udFj0lvRQ",
//"version": {
//"number": "7.12.1",
//"build_flavor": "default",
//"build_type": "docker",
//"build_hash": "3186837139b9c6b6d23c3200870651f10d3343b7",
//"build_date": "2021-04-20T20:56:39.040728659Z",
//"build_snapshot": false,
//"lucene_version": "8.8.0",
//"minimum_wire_compatibility_version": "6.8.0",
//"minimum_index_compatibility_version": "6.0.0-beta1"
//},
//"tagline": "You Know, for Search"
//}
//注意:访问前,打开服务器的端口限制9200或者9300。
2、安装Kibana并设置中文面板
2.1、安装Kibana
Kibana
是一个免费且开放的用户界面,能够让您对 Elasticsearch
数据进行可视化,并让您在 Elastic Stack
中进行导航。您可以进行各种操作,从跟踪查询负载,到理解请求如何流经您的整个应用,都能轻松完成。
// Step 1: 执行命令需要注意`Kibana`操作的`ElasticSearch`地址,因为`Kibana`是需要连`ElasticSearch`进行操作的,命令如下:
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://elasticsearch:9200 \
--network es-net \
-p 5601:5601 \
kibana:7.12.1
//命令说明:
//- `--network es-net` :加入一个名为`es-net`的网络中,与`elasticsearch`在同一个网络中
//- `-e ELASTICSEARCH_HOSTS=http://elasticsearch:9200"`:设置`elasticsearch`的地址,因为`kibana`已经与`elasticsearch`在一个网络,因此可以用容器名直接访问`elasticsearch`(当前使用容器名称访问),也可以写IP地址实现访问。
//- `-p 5601:5601`:端口映射配置
// Step 2: 下载安装完成,如果想实时知道服务安装运行的状态,可以通过查看日志实现,查看日志如下:
docker logs -f kibana
// Step 3: 访问`http://47.109.156.181:5601`即可访问`Kibana`页面。
2.2、设置中文面板
// `Kibana`控制台默认英文面板,但`Kibana`是支持中文配置,所以我们可以把`Kibana`配置成中文版,便于我们操作。
// Step 1: 进入容器
docker exec -it kibana /bin/bash
// Step 2: 进入配置文件目录
cd /usr/share/kibana/config
// Step 3: 编辑文件kibana.yml
vi kibana.yml
// Step 4: 点击i,进入insert模式, 在最后一行添加如下配置
i18n.locale: zh-CN
// Step 5: 点击Esc,输入:wq 保存并推出kibana.yml
// Step 6: 退出kibana容器
exit
// Step 7: 并重启容器
docker restart kibana
// 访问`http://47.109.156.181:5601`即可访问`Kibana`中文页面。
3、安装IK分词器
IK Analyzer
是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, IKAnalyzer
已经推出了多个大版本。最初,它是以开源项目Luence
为应用主体的,结合词典分词和文法分析算法的中文分词组件。IK Analyzer
则发展为面向Java
的公用分词组件,独立于Lucen
e项目,同时提供了对Lucene
的默认优化实现。
ElasticSearch
内核其实就是基于Lucene
,所以我们可以直接在ElasticSearch
中集成IK分词器,IK
分词器集成ElasticSearch
下载地址:github.com/medcl/elast…
3.1、在线安装
// Step 1: 进入容器内部
docker exec -it elasticsearch /bin/bash
// Step 2: 在线下载并安装
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip
// Step 3: 退出
exit
// Step 4:重启容器
docker restart elasticsearch
3.2、离线安装
安装插件需要知道elasticsearch
的plugins
目录位置,而我们用了数据卷挂载,因此需要查看elasticsearch
的数据卷目录,通过下面命令查看:
// 查看数据卷目录
docker volume inspect es-plugins
显示结果:说明plugins
目录被挂载到了:/var/lib/docker/volumes/es-plugins/_data
这个目录中。
[
{
"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"
}
]
下载安装包elasticsearch-analysis-ik-7.12.1.zip
后,并解压,目录如下
先将解压后的
elasticsearch-analysis-ik-7.12.1
拷贝云服务器中。
// Step1: 为了方便配置,我们将elasticsearch-analysis-ik-7.12.1改成ik文件夹
mv elasticsearch-analysis-ik-7.12.1 ik
// Step2: 将ik文件夹拷贝到elasticsearch容器的`plugins`目录中
docker cp ik elasticsearch:/usr/share/elasticsearch/plugins/_data
// Step3: 重启容器
docker restart elasticsearch
// 查看es日志
docker logs -f elasticsearch
3.3、测试IK分词器
IK分词器包含两种模式:
ik_smart
:最少切分ik_max_word
:最细切分
在kibana
的Dev tools
中输入以下代码:
analyzer
就是选择分词器模式
GET /_analyze
{
"analyzer": "ik_max_word",
"text": "黑马程序员学习java太棒了"
}
结果:
{
"tokens" : [
{
"token" : "黑马",
"start_offset" : 0,
"end_offset" : 2,
"type" : "CN_WORD",
"position" : 0
},
{
"token" : "程序员",
"start_offset" : 2,
"end_offset" : 5,
"type" : "CN_WORD",
"position" : 1
},
{
"token" : "程序",
"start_offset" : 2,
"end_offset" : 4,
"type" : "CN_WORD",
"position" : 2
},
{
"token" : "员",
"start_offset" : 4,
"end_offset" : 5,
"type" : "CN_CHAR",
"position" : 3
},
{
"token" : "学习",
"start_offset" : 5,
"end_offset" : 7,
"type" : "CN_WORD",
"position" : 4
},
{
"token" : "java",
"start_offset" : 7,
"end_offset" : 11,
"type" : "ENGLISH",
"position" : 5
},
{
"token" : "太棒了",
"start_offset" : 11,
"end_offset" : 14,
"type" : "CN_WORD",
"position" : 6
},
{
"token" : "太棒",
"start_offset" : 11,
"end_offset" : 13,
"type" : "CN_WORD",
"position" : 7
},
{
"token" : "了",
"start_offset" : 13,
"end_offset" : 14,
"type" : "CN_CHAR",
"position" : 8
}
]
}
3.3.1、扩展词词典
随着互联网的发展,造词运动也越发的频繁。出现了很多新的词语,在原有的词汇列表中并不存在。比如:“奥力给”,“白嫖” 等。所以我们的词汇也需要不断的更新,IK分词器提供了扩展词汇的功能。
1、打开IK分词器config
目录:
2、在IK Analyzer.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">ext.dic</entry>
</properties>
3、新建一个 ext.dic
,可以参考config
目录下复制一个配置文件进行修改
白嫖
奥力给
4、重启elasticsearch
docker restart elasticsearch
# 查看 日志
docker logs -f elasticsearch
日志中已经成功加载
ext.dic
配置文件
5、测试效果:
GET /_analyze
{
"analyzer": "ik_max_word",
"text": "传智播客Java就业超过90%,奥力给!"
}
注意当前文件的编码必须是 UTF-8 格式,严禁使用Windows记事本编辑
3.3.2、停用词词典
在互联网项目中,在网络间传输的速度很快,所以很多语言是不允许在网络上传递的,如:关于宗教、政治等敏感词语,那么我们在搜索时也应该忽略当前词汇。IK
分词器也提供了强大的停用词功能,让我们在索引时就直接忽略当前的停用词汇表中的内容。
1、IK Analyzer.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">ext.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典 *** 添加停用词词典-->
<entry key="ext_stopwords">stopword.dic</entry>
</properties>
2、在 stopword.dic
添加停用词
大帅逼
3、重启elasticsearch
# 重启服务
docker restart elasticsearch
docker restart kibana
# 查看 日志
docker logs -f elasticsearch
日志中已经成功加载stopword.dic
配置文件
4、测试效果:
GET /_analyze
{
"analyzer": "ik_max_word",
"text": "我是真的会谢Java就业率超过95%,大帅逼都点赞白嫖,奥力给!"
}
注意当前文件的编码必须是 UTF-8 格式,严禁使用Windows记事本编辑。