1、Elasticsearch核心概念
- 索引(index):类似的数据放在一个索引,非类似的数据放不同索引,一个索引也可以理解成一个关系型数据库。
- 类型(type):代表document属于index中的哪个类别(type)也有一种说法一种type就像是数据库的表。 ES 5.x中一个index可以有多种type。 ES 6.x中一个index只能有一种type。 ES 7.x以后 要逐渐移除type这个概念。
- 映射(mapping):定义了每个字段的类型等信息。相当于关系型数据库中的表结构。常用的数据类型有text、keyword、number、array、range、boolean、date、geo_point、ip、nested、object
2、安装配置kibana
ElasticSearch没有自带图形化界面,我们可以通过安装ElasticSearch的图形化插件,完成图形化界面的 效果,完成索引数据的查看,比如可视化插件Kibana。
- root账户下解压安装包到/usr/local/kibana 目录下
// 解压安装包 tar -zxvf kibana-7.3.0-linux-x86_64.tar.gz // 移入指定目录 mv /root/kibana-7.3.0-linux-x86_64 /usr/local/kibana/
3、设置访问权限和配置kibana核心配置
// 设置文件夹读写权限 chmod -R 777 /usr/local/kibana/ ####编辑 kibana 核心配置文件 usr/local/kibana/config/kibana.yml // kibana端口, server.port: 5601 // 访问ip server.host: "0.0.0.0" // elasticsearch服务器ip elasticsearch.hosts: ["http://192.168.64.4:9200"]
4、配置完毕,切换用户启动kibana
// 切换用户 su es // 启动kibana,启动文件位于/usr/local/kibana/bin下 sh kibana
启动出现下图所示,则表明kibana 启动成功
5、访问测试 http://192.168.64.4:5601
如果kibana 成功启动还是无法访问下界面,可能是没有开放5601端口,请执行下面命令开放5601端口
firewall-cmd --zone=public --add-port=5601/tcp --permanent
6、Elasticsearch集成IK分词器(下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.3.0)
下载插件并安装(安装方式一)
- 在elasticsearch的bin目录下执行以下命令,es插件管理器会自动帮我们安装,然后等待安装完成
/usr/local/elasticsearch/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis- ik/releases/download/v7.3.0/elasticsearch-analysis-ik-7.3.0.zip
2. 下载完成后会提示 Continue with installation?输入 y 即可完成安装
3. 重启Elasticsearch 和Kibana
上传安装包安装 (安装方式二)
- 在elasticsearch安装目录的plugins目录下新建 analysis-ik 目录
// 新建analysis-ik文件夹 mkdir analysis-ik // 切换至 analysis-ik文件夹下 cd analysis-ik //上传资料中的 elasticsearch-analysis-ik-7.3.0.zip // 安装unzip 命令包(按需) yum -y install unzip // 解压 unzip elasticsearch-analysis-ik-7.3.3.zip // 解压完成后删除zip (一定要删除安装包,否则启动会报错) rm -rf elasticsearch-analysis-ik-7.3.0.zip
2. 重启Elasticsearch 和Kibana
IK分词器有两种分词模式:ik_max_word和ik_smart模式 1)ik_max_word (常用):会将文本做最细粒度的拆分 2)ik_smart:会做最粗粒度的拆分
7、测试IK分词器
IK的ik_max_word 分词器
IK的ik_smart 分词器
8、IK扩展词典的应用
就是不想让哪些词被分开,让他们分成一个词
- 进入到 confifig/analysis-ik/(插件命令安装方式) 或 plugins/analysis-ik/confifig(安装包安装方式) 目录下, 新增自定义词典
//创建扩展词字典 vim ext_dict.dic //输入不想拆分开的词后保存
- 将扩展词词典配置到IK 的核心配置文件 IKAnalyzer.cfg.xml中,然后重启elasticsearch
9、同义词字典配置
中文博大精深,中文中存在着很多同样意思的词语,如土豆=马铃薯,番茄=西红柿等,有的人喜欢用土豆搜索,有的人喜欢使用马铃薯搜索,但其实这两个是同一种物品,怎么才能做到搜索土豆自动出现马铃薯呢,这就需要我们使用同义词词典
Elasticsearch 自带一个名为 synonym 的同义词 fifilter。为了能让 IK 和 synonym 同时工作,我们需要定义新的 analyzer,用 IK 做 tokenizer,synonym 做 fifilter。听上去很复杂,实际上要做的只是加一段配置。
- 在elasticsearch安装目录下创建ik/synonym.txt文件 ( /usr/local/elasticsearch/config/ik/synonym.txt )
- 编辑synonym.txt文件,添加同义词组后保存
- 创建索引时,使用同义词配置,如下面样例
PUT /index1 { "settings": { "analysis": { "filter": { "word_sync": { "type": "synonym", "synonyms_path": "ik/synonym.txt" } }, "analyzer": { "ik_sync_max_word": { "filter": [ "word_sync" ], "type": "custom", "tokenizer": "ik_max_word" }, "ik_sync_smart": { "filter": [ "word_sync" ], "type": "custom", "tokenizer": "ik_smart" } } } }, "mappings": { "properties": { "name": { "type": "text", "analyzer": "ik_sync_smart", "search_analyzer": "ik_sync_smart" } } } }
- 向索引中添加数据测试同义词词典是否生效
POST /index1/_doc/1 { "name":"云南居然盛产七彩土豆,以前从没见过!" }
- 使用同义词"马铃薯"进行搜索