Elasticsearch 基础教程

Elasticsearch 高级教程

Elasticsearch 插件

Elasticsearch 笔记

Elasticsearch(es)插件安装、管理、开发、使用全解


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

如上示例的 -velasticsearch-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 步:

  1. 下载 analysis-smartcn 离线包;
  2. 将下载完的离线包解压到 es 插件目录下;
  3. 重新启动 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 个参数用来进行自定义配置,分别是:

  1. convert_type:设置转换的方向,默认是 s2t,表示简体到繁体,如果要将繁体转换为简体,则设置为 t2s
  2. keep_both:用于设置是否保留转换之前的内容,默认是 false,也就是不保留。
  3. 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 中的 lowercasestop 组件。

这里需要强调的是,如果繁体转简体没在 char_filter 中配置,且一般词表中不会配置繁体词库,会导致所有的繁体都会分词成单个字,所以一般都在 char_filter 中配置繁转简。