es 插件是一种增强 Elasticsearch 核心功能的途径,诸如常用的 ik 中文分词器、可视化操作界面 head 插件、集群监控工具 bigdesk 等等。es 安装的插件可以是 jar 包文件,也可能是包含脚本和配置文件,而且必须在集群中的每个节点上都进行安装,并需要重启集群中的每个节点才能使插件完整生效。
插件类型
es 插件主要分为 2 种,一种是核心插件、另一种是第三方插件。
核心插件
核心插件指的是 elasticsearch 项目提供的官方插件,它们都是开源项目。这些插件会随着 elasticsearch 版本升级进行更新,此外,这些插件是有官方团队和社区成员共同开发的。
官方插件地址:https://github.com/elastic/elasticsearch/tree/master/plugins
第三方插件
es 的第三方插件是由开发者或第三方组织自主开发的便于扩展 elasticsearch 功能的,它们拥有自己的许可协议,在使用它们之前需要清楚插件的使用协议,而且插件不能保证 elasticsearch 版本的兼容性。
插件安装方式
es 插件的安装主要分为 3 种方式,分别为命令指定插件名称的安装、命令指定 url 的方式以及离线安装方式。
其中前两个都属于命令行的安装方式。
指定插件名称
es 提供了安装插件的命令 elasticsearch-plugin。
其安装的命令格式如下:
elasticsearch-plugin install [plugin_name]
其中 plugin_name 指的是插件名称,以官方提供的中文分词器 analysis-smartcn 插件安装示例,如下:
$ elasticsearch-plugin install analysis-smartcn -v
Checking if url exists: https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-smartcn/analysis-smartcn-darwin-x86_64-6.8.11.zip
-> Downloading analysis-smartcn from elastic
Retrieving zip from https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-smartcn/analysis-smartcn-6.8.11.zip
[=================================================] 100%
- Plugin information:
Name: analysis-smartcn
Description: Smart Chinese Analysis plugin integrates Lucene Smart Chinese analysis module into elasticsearch.
Version: 6.8.11
Elasticsearch Version: 6.8.11
Java Version: 1.8
Native Controller: false
Extended Plugins: []
* Classname: org.elasticsearch.plugin.analysis.smartcn.AnalysisSmartChinesePlugin
plugin has a policy file with no additional permissions
-> Installed analysis-smartcn
如上示例的 -v 是 elasticsearch-plugin 命令的参数选项,打印输出的日志信息。
指定 url
es 插件也可以通过对应插件开源的 url 相应地址进行安装,其实主要都在 github 上,具体命令格式如下:
elasticsearch-plugin install [url]
以常用的第三方中文分词器 ik 为例,具体命令如下:
$ elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.11/elasticsearch-analysis-ik-6.8.11.zip -v
-> Downloading https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.11/elasticsearch-analysis-ik-6.8.11.zip
Retrieving zip from https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.11/elasticsearch-analysis-ik-6.8.11.zip
[=================================================] 100%
- Plugin information:
Name: analysis-ik
Description: IK Analyzer for Elasticsearch
Version: 6.8.11
Elasticsearch Version: 6.8.11
Java Version: 1.8
Native Controller: false
Extended Plugins: []
* Classname: org.elasticsearch.plugin.analysis.ik.AnalysisIkPlugin
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: plugin requires additional permissions @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.net.SocketPermission * connect,resolve
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.
Continue with installation? [y/N]y
-> Installed analysis-ik
url 常见的有 http 和 file 形式。
离线安装
离线安装主要是使用在网络状况不好时,提前下载相应的插件文件,然后将其解压在 es 安装根目录下的插件目录下(通常是 plugins 目录)。
同样以 smartcn 插件为例:
$ sudo wget -P /opt/packages https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-smartcn/analysis-smartcn-6.4.0.zip
$ sudo tar -zxvf /opt/packages/analysis-smartcn-6.4.0.zip -C /opt/apps/elasticsearch-6.4.0/plugins
$ sudo systemctl restart elasticsearch.service
示例分为如下 3 步:
- 下载 analysis-smartcn 离线包;
- 将下载完的离线包解压到 es 插件目录下;
- 重新启动 elasticsearch 使新装插件生效。
elasticsearch 新装的插件必须重启整个 es 集群才会生效。
插件管理命令
es 插件管理的命令从 5.x 开始将原来的 bin/plugin 命令改为 bin/elasticsearch-plugin,插件的安装、列表及删除都可以通过改命令操作。
插件列表
查看当前已安装的插件列表命令:
elasticsearch-plugin list
值得注意的是,已安装的插件不等于是生效的插件,如之前所述,新装的插件需要重启 es 才能生效。
删除插件
移除指定的插件操作命令:
elasticsearch-plugin remove [plugin_name]
常用插件
elasticsearch 中,常用的标配插件中有 ik 中文分词插件、stconvert 简体繁体转换插件等。
elasticsearch-analysis-stconvert
这是中文简繁體互相转换的插件,是中文 es 使用的标配,github 地址:https://github.com/medcl/elasticsearch-analysis-stconvert。
stconvert 插件一共提供了 4 个不同的组件,包含分析器流程的每个模块,具体如下:
- 一个
type
名为 stconvert 的 Analyzer,可以将简体繁体相互转换。 - 一个
type
名为 stconvert 的 Tokenizer,可以将简体繁体相互转换。 - 一个
type
名为 stconvert 的 Token Filter,可以将简体繁体相互转换。 - 一个
type
名为 stconvert 的 Char Filter,可以将简体繁体相互转换。
每个组件都可以有以下 3 个参数用来进行自定义配置,分别是:
convert_type
:设置转换的方向,默认是s2t
,表示简体到繁体,如果要将繁体转换为简体,则设置为t2s
。keep_both
:用于设置是否保留转换之前的内容,默认是false
,也就是不保留。delimiter
:主要是用于,当保留原始内容的时候,如何分割两部分内容,默认的值是逗号,
,常用的有#
、;
等等。
一般简体繁体转换常和 ik 一起搭配使用,通常是在 char_filter 中配置繁体转换简体,然后在 tokenizer 中配置 ik 分词器,如下示例:
{
"settings" : {
"analysis": {
"char_filter": {
"tsconvert": {
"type": "stconvert",
"convert_type": "t2s"
}
},
"filter": {
"synonym": {
"type": "synonym",
"synonyms_path": "analysis/synonyms.txt"
}
},
"analyzer": {
"t2s_ik_max_word_synonym": {
"char_filter": "tsconvert",
"tokenizer": "ik_max_word",
"filter": [
"synonym"
]
},
"t2s_ik_smart_synonym": {
"char_filter": "tsconvert",
"tokenizer": "ik_smart",
"filter": [
"synonym"
]
}
}
}
}
}
由于 ik 分词器中包含了小写化、停用词的流程,这里省略了 filter 中的 lowercase
和 stop
组件。
这里需要强调的是,如果繁体转简体没在 char_filter 中配置,且一般词表中不会配置繁体词库,会导致所有的繁体都会分词成单个字,所以一般都在 char_filter 中配置繁转简。