博客地址:http://www.moonxy.com

一、前言

Elasticsearch 作为开源搜索引擎服务器,其核心功能在于索引和搜索数据。索引是把文档写入 Elasticsearch 的过程,搜索是匹配查询条件找出文档的过程,实现全文检索一个分析过程,分析过程主要分为两步,第一步是词条化,分词器把输入文本转化为一个个的词条流;第二步是过滤,在这个阶段有若干个过滤器处理词条流中的词条,比如停用词过滤器会从词条流中去除不相干的词条,同义词过滤器会添加新词条或者改变已有词条,小写过滤器会把所有词条变成小写。

Elasticsearch 内置多种分词器可供使用,在索引和查询过程中我们可以指定分词器,也可以通过安装插件的方式使用第三方分词工具。比如目前使用最多的第三方插件 elasticsearch-analysis-ik,其代码托管在 GItHub 上,项目地址为:https://github.com/medcl/elasticsearch-analysis-ik,统一版本号之后的 IK 版本与 Elasticsearch 的版本一致。

二、安装 IK 分词插件

2.1 参照官方文档安装IK分词器

1)直接到 https://github.com/medcl/elasticsearch-analysis-ik/releases 下载对应版本 zip 包

在 elasticsearch的 plugin 目录下新建 ik 目录,然后将其解压到 ik 目录

[root@masternode ~]$ unzip /usr/software/elasticsearch-analysis-ik-5.6..zip

目录结构如下:

[esuser@masternode ik]$ pwd
/opt/elk/elasticsearch-5.6./plugins/ik
[esuser@masternode ik]$ ll
total
-rw-r--r-- esuser esuser May : commons-codec-1.9.jar
-rw-r--r-- esuser esuser May : commons-logging-1.2.jar
drwxr-xr-x esuser esuser May : config
-rw-r--r-- esuser esuser May : elasticsearch-analysis-ik-5.6..jar
-rw-r--r-- esuser esuser May : httpclient-4.5..jar
-rw-r--r-- esuser esuser May : httpcore-4.4..jar
-rw-r--r-- esuser esuser May : plugin-descriptor.properties

2)使用 elasticsearch-plugin 命令安装

[esuser@masternode elasticsearch-5.6.]$ ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.6.0/elasticsearch-analysis-ik-5.6.0.zip

安装 ik 插件之后,修改目录的访问权限为 esuer,如下:

[root@masternode plugins]# chown -R esuser:esuser ik

在 IK 插件的配置文件(/opt/elk/elasticsearch-5.6.0/plugins/ik/config/IKAnalyzer.cfg.xml)中可以指定词库的位置,也可以自定义字典 hotwords.dic,每一个词语一行,然后添加到配置文件中,多个配置文件之间使用英文分号隔开。

比如下面的设置:

<?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">extra_main.dic;hotwords.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">extra_stopword.dic</entry>
<!--用户可以在这里配置远程扩展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

设置好词典之后,重启 Elasticsearch,如下:

发现日志中已经加载了我们上面设置的词典,表明 IK 分词器插件已经安装成功。

2.2、IK 分词算法比较

IK 分词器主要使用两种分词算法:ik_max_word 和 ik_smart,两者的区别如下:

ik_max_word:会将文本做最细粒度的拆分,比如会将"中华人民共和国国歌"拆分为"中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌",会穷尽各种可能的组合;

ik_smart:会做最粗粒度的拆分,即智能切分,比如会将"中华人民共和国国歌"拆分为"中华人民共和国,国歌"。

三、安装 Head 插件

Elastic-Head(简称 Head)是一个 HTML5 编写的集群操作和管理工具,可以对集群进行很多操作。在 Head 插件中可以显示集群的拓扑结构,执行索引和节点级别的操作,同时也能够输入 RESTful 命令和 Elasticsearch 交互。ES5.0之后,head 不再作为插件放在其 {es_home}/plugins 目录下,而是变为独立运行的本地或 server 服务,需要单独运行。如果让 head 作为 server 程序部署和运行,则需要借助 npm 和 grunt 组件完成。npm 是随同 node.js 一起安装的包管理工具,能解决 node.js 代码部署上的很多问题。grunt 是一个基于任务的 Javascript 命令行构建工具,grunt 及其插件是通过 npm 安装并管理的。

3.1 安装 Git

elasticsearch-head 是一款开源软件,被托管在 Github 上面,所以如果我们要使用它,需要先安装 git,通过 git 获取 elasticsearch-head。

安装 git 的源码包

1)进入 git 官网:https://git-scm.com/download,获取 linux 版本的 git,或者直接访问所有版本的目录:https://mirrors.edge.kernel.org/pub/software/scm/git/,比如下载 git-2.9.5.tar.gz,如下:

2)安装 gcc、g++ 以及编译 git 所需要的包

安装 gcc 编译器

[root@masternode ~]# yum install gcc

安装 g++ 编译器

[root@masternode ~]# yum install gcc-c++

安装编译所依赖的其他包

[root@masternode ~]# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

[root@masternode ~]# yum install gcc perl-ExtUtils-MakeMaker

3)编译并安装 git

[root@masternode ~]# tar zxvf /usr/software/git-2.9.5.tar.gz

[root@masternode git-2.9.5]# ./configure --prefix=/opt/git/git-2.9.5 && make install

编译并指定安装目录 /opt/git/git-2.9.5,然后安装。

4)设置 git 的环境变量

[root@masternode bin]# vi /etc/profile

在文件最后一行添加

export PATH=/opt/git/git-2.9.5/bin:$PATH

保存后执行

[root@masternode bin]# source /etc/profile

使配置文件生效

3.2 安装 Node.js

运行 elasticsearch-head 会用到 grunt,而 grunt 需要 npm 包管理器,所以 node.js 是必须要安装的。

安装编译后的可执行文件 Node.js

访问 node.js 的官网: https://nodejs.org/en/

选择 LTS 版本,如下:

一般开放源代码软件都会至少有两个版本发布:

Source Code 是源代码版,你需要自己编译成可执行软件。

Linux Binaries 是二进制可执行版,已经给你编译好了,直接下载解压就可以使用。

此处下载二进制包 node-v8.11.2-linux-x64.tar.xz,然后解压:

[root@masternode software]# xz -d node-v8.11.2-linux-x64.tar.xz

[root@masternode software]# tar -xvf node-v8.11.2-linux-x64.tar -C /opt/nodejs

[root@masternode software]# vi /etc/profile

然后输入双引号里面的命令:":$",跳到文件最后一行

将下面这行拷贝到文件最底部,并保存

export PATH=/opt/nodejs/node-v8.11.2-linux-x64/bin:$PATH

更新 profile,使更改生效

[root@masternode software]# source /etc/profile

安装 cnpm

由于使用 npm 安装依赖包太慢(都是国外的),所以使用国内淘宝的镜像吧,安装 cnpm

[root@masternode software]# npm install -g cnpm --registry=https://registry.npm.taobao.org

3.3 验证以上软件

可以通过查看其版本号来验证以上安装的软件,如下:

[root@masternode software]# node -v
v8.11.2
[root@masternode software]# npm -v
5.6.
[root@masternode software]# cnpm -v
cnpm@5.3. (/opt/nodejs/node-v8.11.2-linux-x64/lib/node_modules/cnpm/lib/parse_argv.js)
npm@5.10. (/opt/nodejs/node-v8.11.2-linux-x64/lib/node_modules/cnpm/node_modules/npm/lib/npm.js)
node@8.11. (/opt/nodejs/node-v8.11.2-linux-x64/bin/node)
npminstall@3.6. (/opt/nodejs/node-v8.11.2-linux-x64/lib/node_modules/cnpm/node_modules/npminstall/lib/index.js)
prefix=/opt/nodejs/node-v8.11.2-linux-x64
linux x64 3.10.-.el7.x86_64
registry=https://registry.npm.taobao.org

如上所示,说明 Node 环境已经配置成功。

3.4 安装 head 插件

[root@masternode ~]# cd /opt/eshead

使用 git 命令下载 elasticsearch-head 到本地:

[root@masternode eshead]# git clone git://github.com/mobz/elasticsearch-head.git

[root@masternode eshead]# cd elasticsearch-head

安装 elasticsearch-head 依赖包:

[root@masternode elasticsearch-head]# cnpm install

如果运行 # cnpm install 之后出现如下错误:

optional install error: Package require os(darwin) not compatible with your platform(linux)

可运行如下命令解决:

[root@masternode elasticsearch-head]# cnpm rebuild node-sass

然后再次运行 # cnpm install 进行安装:

[root@masternode elasticsearch-head]# cnpm install

修改 Head 插件的配置文件

[root@masternode elasticsearch-head]# vi Gruntfile.js

找到如下元素,将 hostname 的值修改为 '*',表示允许所有 IP 可以访问 head 插件:

保存后退出 vi。

修改 Elasticsearch 的配置文件

编辑 /opt/elk/elasticsearch-5.6.0/config/elasticsearch.yml,添加如下设置:

http.cors.enabled: true
http.cors.allow-origin: "*"

3.5 开启 9100 端口

如果需要在别的机器上访问 head 插件,防火墙必须放行 9100 端口。

永久开启 9100 端口

[root@masternode elasticsearch-head]# firewall-cmd --zone=public --add-port=9100/tcp --permanent

重启防火墙

[root@masternode elasticsearch-head]# firewall-cmd --reload

3.6 分别启动 Elasticsearch 和 head 插件

将 head 插件的目录所有者修改为 esuser:

[root@masternode opt]# chown -R esuser:esuser eshead

启动 Elasticsearch,如下:

[esuser@masternode elasticsearch-5.6.]$ pwd
/opt/elk/elasticsearch-5.6.
[esuser@masternode elasticsearch-5.6.]$ ./bin/elasticsearch

启动 head 插件,如下:

[esuser@masternode elasticsearch-head]$ pwd
/opt/eshead/elasticsearch-head
[esuser@masternode elasticsearch-head]$ ./node_modules/grunt/bin/grunt server
(node:) ExperimentalWarning: The http2 module is an experimental API.
Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100

如上,表示 elasticsearch-head 插件启动成功。

3.7 访问 head 插件

浏览器输入 http://192.168.56.110:9100,单节点返回如下页面。前提是 Gruntfile.js 中的 hostname 修改为 '*',且防火墙放行 9100 端口。

实心五角星表示主节点(master node)。

集群返回如下页面:

实心圆圈表示工作节点(data node)。

创建索引之后显示如下:

其中每一个绿色小方格均代表一个数据分片(shard),横向每一行均代表一个节点(node),纵向每一列均代表一个索引(index)。

附录

其他安装细节可参考如下文章:

centos7安装elasticsearch-head

Elastic Stack 笔记(二)Elasticsearch5.6 安装 IK 分词器和 Head 插件的更多相关文章

  1. ElasticSearch5.3安装IK分词器并验证

    ElasticSearch5.3安装IK分词器 之前使用Elasticsearch安装head插件成功了,但是安装IK分词器却失败了.貌似是ElasticSearch5.0以后就不支持直接在elast ...

  2. Elasticsearch5.1.1+ik分词器+HEAD插件安装小记

    一.安装elasticsearch 1.首先需要安装好java,并配置好环境变量,详细教程请看 http://tecadmin.net/install-java-8-on-centos-rhel-an ...

  3. 【ELK】【docker】【elasticsearch】1. 使用Docker和Elasticsearch+ kibana 5.6.9 搭建全文本搜索引擎应用 集群,安装ik分词器

    系列文章:[建议从第二章开始] [ELK][docker][elasticsearch]1. 使用Docker和Elasticsearch+ kibana 5.6.9 搭建全文本搜索引擎应用 集群,安 ...

  4. Linux下,非Docker启动Elasticsearch 6.3.0,安装ik分词器插件,以及使用Kibana测试Elasticsearch,

    Linux下,非Docker启动Elasticsearch 6.3.0 查看java版本,需要1.8版本 java -version yum -y install java 创建用户,因为elasti ...

  5. Linux使用Docker启动Elasticsearch并配合Kibana使用,安装ik分词器

    注意事项 这里我的Linux虚拟机的IP地址是192.168.1.3 Docker运行Elasticsearch容器之后不会立即有反应,要等一会,等待容器内部启动Elasticsearch,才可以访问 ...

  6. 如何开发自己的搜索帝国之安装ik分词器

     Elasticsearch默认提供的分词器,会把每个汉字分开,而不是我们想要的根据关键词来分词,我是中国人 不能简单的分成一个个字,我们更希望 “中国人”,“中国”,“我”这样的分词,这样我们就需要 ...

  7. Elasticsearch入门之从零开始安装ik分词器

    起因 需要在ES中使用聚合进行统计分析,但是聚合字段值为中文,ES的默认分词器对于中文支持非常不友好:会把完整的中文词语拆分为一系列独立的汉字进行聚合,显然这并不是我的初衷.我们来看个实例: POST ...

  8. Elasticsearch下安装ik分词器

    安装ik分词器(必须安装maven) 上传相应jar包 解压到相应目录 unzip elasticsearch-analysis-ik-master.zip(zip包) cp -r elasticse ...

  9. windows下elasticsearch安装ik分词器后无法启动

    windows下elasticsearch安装ik分词器后启动报如下图错误: 然后百度说是elasticsearch路径有空格,一看果然我的路径有空格,然后重新换个路径就好了.

随机推荐

  1. 对博弈活动中蕴含的信息论原理的讨论,以及从熵角度看不同词素抽象方式在WEBSHELL文本检测中的效果区别

    1. 从赛马说起 0x1:赛马问题场景介绍 假设在一场赛马中有m匹马参赛,令第i匹参赛马获胜的概率为pi,如果第i匹马获胜,那么机会收益为oi比1,即在第i匹马上每投资一美元,如果赢了,会得到oi美元 ...

  2. T-SQL基础语句

    存储过程允许标准组件式编程(模块化设计) 存储过程能够实现快速的执行速度 存储过程能够减少网络流量 存储过程可被作为一种安全机制充分利用 在SQL Server 的系列版本中存储过程分为两类:系统提供 ...

  3. [WPF自定义控件库] 给WPF一个HyperlinkButton

    1. 在WPF怎么在UI上添加超级链接 这篇文章的目的是介绍怎么在WPF里创建自定义的HyperlinkButton控件.很神奇的,WPF居然连HyperlinkButton都没有,不过它提供了另一种 ...

  4. cocos creator 事件

    cocos creator 事件 在做一个消除类游戏时,需要对点击的方块做出响应.代码很简单,可背后的原理还多着呢. 1. 普通节点注册click事件 在cc中如果需要相应click事件,需要为该节点 ...

  5. 基于python的mysql复制工具

    一简介 python-mysql-replication 是由python实现的 MySQL复制协议工具,我们可以用它来解析binlog 获取日志的insert,update,delete等事件 ,并 ...

  6. android下JNI开发

    android下JNI开发 what 什么是JNI JNI java native interface native本地 java本地接口 通过JNI可以实现java和本地代码之间相互调用 jni可以 ...

  7. Leetcode之深度优先搜索(DFS)专题-547. 朋友圈(Friend Circles)

    Leetcode之深度优先搜索(DFS)专题-547. 朋友圈(Friend Circles) 深度优先搜索的解题详细介绍,点击 班上有 N 名学生.其中有些人是朋友,有些则不是.他们的友谊具有是传递 ...

  8. Delphi - StringReplace用法

    StringReplace用法 在开发过程中,有时候我们需要对字符串进行替换操作,屏蔽或者和谐某些字符,可使用Delphi自带的函数StringReplace函数. 通过代码进行说明: //函数原型 ...

  9. NLP(十一) 提取文本摘要

    gensim.summarization库的函数 gensim.summarization.summarize(text, ratio=0.2, word_count=None, split=Fals ...

  10. Codeforces Round #461 (Div. 2)B-Magic Forest+位运算或优雅的暴力

    Magic Forest 题意:就是在1 ~ n中找三个值,满足三角形的要求,同时三个数的异或运算还要为0: , where  denotes the bitwise xor of integers  ...