安装ES
# 1.下载ES
- https://www.elastic.co/cn/start#环境说明
在Linux(centos7中安装,es包里有自带jdk,es7一般要用jidk11+
es安装不能使用root用户,需创建普通用户
# 添加用户名
$ useradd es_lxx
# 修改密码
$ passwd es_lxx
# 普通用户登录
$ su es_lxx
上传es压缩包到es_lxx用户目录下
#解压压缩包
tar -zxvf elasticsearch-7.14.0-linux-x86_64.tar.gz
#解压后的目录结构
[es_lxx@lxx02 elasticsearch-7.14.0]$ ll
- bin 启动ES服务脚本目录
- config ES配置文件的目录
- data ES的数据存放目录(启动后生成)
- jdk ES提供需要指定的jdk目录
- lib ES依赖第三方库的目录
- logs ES的日志目录
- modules 模块的目录
- plugins 插件目录
#启动es,在bin目录下启动
$ ./elasticsearch
如果有报错,有可能是本地有安装了JDK用到本地的JDK了,指定下环境变量,没报错就不用
# 配置环境变量
$ vim /etc/profile
- export ES_JAVA_HOME=指定为ES安装目录中jdk目录
- source /etc/profile
用本机返问下:返回这些信息代表成功,es默认的监听端口是9200
开启远程访问
# 1.默认ES无法使用主机ip进行远程连接,需要开启远程连接权限
- 修改ES安装包中config/elasticsearch.yml配置文件
修改完后启动报了三个错
- 需要修改每个进程最大同时打开文件数
- 修改elasticsearch用户拥有的内存权限太小,至少需要262144
- 因为es默认以集群的方式启动,这里缺少es集群的默认配置,这里我们给他改成单机版
解决上面的错误:记得切换到root用户,否则会提示权限不足
# 解决错误-1,修改最大的打开文件数量
#打开limits.conf文件
$ vim /etc/security/limits.conf
# 在最后面追加下面内容
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
# 退出重新登录检测配置是否生效(su 到别的用户,在su 回来就可以)
ulimit -Hn
ulimit -Sn
ulimit -Hu
ulimit -Su
# 解决错误-2,修改最大的打开文件数量
# 编辑sysctl.conf文件
$ vim /etc/sysctl.conf
#添加属性
vm.max_map_count=655360
# 执行以下命令生效:
$ sysctl -p
# 解决错误-3,修改集群模式
# 编辑elasticsearch.yml配置文件,这个文件在es安装目录的config目录下
$ vim elasticsearch.yml
cluster.initial_master_nodes: ["node-1"]
修改后用es用户重启es
这样就可以用远程访问es了
安装完es之后,我们在来安装kibana。
安装kibana
kibana是es的可视化平台,类似Navicat与mysql的关系,使用Kibana可以查询、查看并与存储在ES索引的数据进行交互操作,使用Kibana能执行高级的数据分析,并能以图表、表格和地图的形式查看数据。
注意kibana的版本号要和es的版本号一致,kibana安装前要先把es启动起来
# 1. 下载Kibana
- https://www.elastic.co/downloads/kibana
#首先把下载好的kibana压缩包放到自己喜欢的目录
# 2.解压下载的kibana
- $ tar -zxvf kibana-7.14.0-linux-x86_64.tar.gz
# 3. 编辑kibana配置文件
- $ vim /Kibana 安装目录中 config 目录/kibana/kibana.yml
# 4. 修改如下配置
- server.host: "0.0.0.0" # 开启kibana远程访问
- elasticsearch.hosts: ["http://localhost:9200"] #ES服务器地址
# 5. 启动kibana,进入到kibana安装文件夹下
- ./bin/kibana
# 6. 访问kibana的web界面
- http://192.168.1.129:5601/ #kibana默认端口为5601
分词器
Analysis 和 Analyzer
`Analysis`: 文本分析是把全文本转换一系列单词(term/token)的过程,也叫分词(Analyzer)。Analysis是通过Analyzer来实现的。`分词就是将文档通过Analyzer分成一个一个的Term(关键词查询),每一个Term都指向包含这个Term的文档`。
Analyzer 组成
-
注意: 在ES中默认使用标准分词器: StandardAnalyzer 特点: 中文单字分词 单词分词
我是中国人 this is good man----> analyzer----> 我 是 中 国 人 this is good man
分析器(analyzer)都由三种构件组成的:
character filters
,tokenizers
,token filters
。
-
character filter
字符过滤器-
在一段文本进行分词之前,先进行预处理,比如说最常见的就是,过滤html标签(<span>hello<span> --> hello),& --> and(I&you --> I and you)
-
-
tokenizers
分词器-
英文分词可以根据空格将单词分开,中文分词比较复杂,可以采用机器学习算法来分词。
-
-
Token filters
Token过滤器-
将切分的单词进行加工。大小写转换(例将“Quick”转为小写),去掉停用词(例如停用词像“a”、“and”、“the”等等),加入同义词(例如同义词像“jump”和“leap”)。
-
注意:
-
三者顺序: Character Filters--->Tokenizer--->Token Filter
-
三者个数:Character Filters(0个或多个) + Tokenizer + Token Filters(0个或多个)
内置分词器
-
Standard Analyzer - 默认分词器,英文按单词词切分,并小写处理
-
Simple Analyzer - 按照单词切分(符号被过滤), 小写处理
-
Stop Analyzer - 小写处理,停用词过滤(the,a,is)
-
Whitespace Analyzer - 按照空格切分,不转小写
-
Keyword Analyzer - 不分词,直接将输入当作输出
内置分词器测试
-
标准分词器
-
特点: 按照单词分词 英文统一转为小写 过滤标点符号 中文单字分词
-
POST /_analyze
{
"analyzer": "standard",
"text": "this is a , good Man 中华人民共和国"
}
-
Simple 分词器
-
特点: 英文按照单词分词 英文统一转为小写 去掉符号 中文按照空格进行分词
-
POST /_analyze
{
"analyzer": "simple",
"text": "this is a , good Man 中华人民共和国"
}
-
Whitespace 分词器
-
特点: 中文 英文 按照空格分词 英文不会转为小写 不去掉标点符号
-
POST /_analyze
{
"analyzer": "whitespace",
"text": "this is a , good Man"
}
创建索引设置分词
PUT /索引名
{
"settings": {},
"mappings": {
"properties": {
"title":{
"type": "text",
"analyzer": "standard" //显示指定分词器
}
}
}
}
中文分词器
在ES中支持中文分词器非常多 如 smartCN、IK 等,推荐的就是 IK分词器
。
IK分词器安装
开源分词器 Ik 的github:GitHub - medcl/elasticsearch-analysis-ik: The IK Analysis plugin integrates Lucene IK analyzer into elasticsearch, support customized dictionary.
-
注意
IK分词器的版本要你安装ES的版本一致
下载完ik分词器后是一个zip文件,在window解压后放入到es的plugins目录下
然后启动es
IK使用
IK有两种颗粒度的拆分:
-
ik_smart
: 会做最粗粒度的拆分 -
ik_max_word
: 会将文本做最细粒度的拆分
POST /_analyze
{
"analyzer": "ik_smart",
"text": "中华人民共和国国歌"
}
POST /_analyze
{
"analyzer": "ik_max_word",
"text": "中华人民"
}
扩展词、停用词配置
IK支持自定义扩展词典
和停用词典
-
扩展词典
就是有些词并不是关键词,但是也希望被ES用来作为检索的关键词,可以将这些词加入扩展词典。 -
停用词典
就是有些词是关键词,但是出于业务场景不想使用这些关键词被检索到,可以将这些词放入停用词典。
定义扩展词典和停用词典可以修改IK分词器中config
目录中IKAnalyzer.cfg.xml
这个文件。
1. 修改vim 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">ext_dict.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">ext_stopword.dic</entry>
</properties>
2. 在ik分词器目录下config目录中创建ext_dict.dic文件 编码一定要为UTF-8才能生效
vim ext_dict.dic 加入扩展词即可
3. 在ik分词器目录下config目录中创建ext_stopword.dic文件
vim ext_stopword.dic 加入停用词即可
4.重启es生效
注意:
词典的编码必须为UTF-8,否则无法生效!