本文可按照如下结构划分:
- ElasticSearch及Kibana的安装
- 使用默认分词器的简单展示
- 安装IK分词器并和默认分词器进行对比
ElasticSearch诞生于2010年,但是其前身可以追溯到诞生于2004年的Compass。关于其有趣的诞生理由就不在本文提及了。它是基于Lucene进行再封装的搜索工具,支持Restful接口访问并且对很多编程语言做了支持。本文主要介绍搜索核心ElasticSearch,可视化工具Kibana以及分词插件IK的安装。
1. ElasticSearch的安装
打开ElasticSearch官网,根据操作系统选择平台,GA代表正式版,Preview是预览版,建议选择GA,目前windows平台已经更新到了7.16.2版本,直接点击下载按钮即可
下载完成后会得到一个zip包,解压缩到自己的文件夹下。先来浏览目录结构
其中plugin文件夹,待会介绍IK分词器时会使用到。它是用来存储各种我们自定义的插件的。
ElasticSearch是基于Lucene再封装的java文件,所以使用java开发的程序员们应该对这套架构非常熟悉。下面介绍Kibana的安装
2. Kibana的安装
Kibana是对ElasticSearch里的数据进行展示的一个前端工具。这样的工具还有很多。由于Kibana是官方提供的工具,所以本文只介绍Kibana的使用。同样打开ElasticSearch官网,注意Kibana的版本要和ElasticSearch保持一致。即如果ElasticSearch刚刚下载的是7.10.2版本,那么Kibana也要选择7.10.2版本进行下载。下载完成后同样解压缩到自己的文件夹。我们打开config下的kibana.yml,这是kibana的配置文件
我们找到配置文件的这一项 - elasticsearch.hosts:
,这一行就是Kibana连接ES的配置项。默认连接的是本机的ES,如果使用的是docker容器或者服务器上的ES,更改这一行即可。
我们将配置文件拉到底部有一个配置行- i18n.locale: "en"
, i18n是一个比较通用的国际化工具。若想要kibana的页面为中文,改成如图所示的zh-CN
就行
3. ES和Kibana的启动
安装好ES和Kibana后,其实本机的环境就已经搭建好了。刚刚说到在kibana的配置文件中有一行是ElasticSearch集群的地址,所以一定要先启动ElasticSearch,再启动Kibana.
打开ElasticSearch文件夹下的bin文件夹,双击打开 elasticsearch.bat
出现started字样,代表启动成功,并且暴露的端口号是9200
ElasticSearch支持Restful风格的请求,随意打开一个浏览器,地址栏输入http://localhost:9200/
见到如下界面,代表访问成功
接下来启动kibana,同样找到kibana文件夹下的bin目录,双击kibana.bat
打开浏览器,地址栏输入 http://localhost:5601/
,
可以看到kibana的主页,不仅成功访问到Kibana,而且界面还如同设置一样成为了中文
4. 简单使用ES
ES的数据存储方式是JSON,且前面提到支持Restful请求。
在kibana页面左下角找到dev-tools/开发工具。
可以看到官方已经写好了一条查询语句。直接点击运行,出现如下结果。
这个我们不关心,我们知道。ES的底层核心是lucene和倒排索引,而要想使用倒排索引,则必须先对语句进行分词 - 即按照大众所熟知的方式对一条语句进行分段。ElasticSearch内置了默认的分词器,对英文支持友好,对中文不太友好,比如:
ElasticSearch is one of the best search tools in the world.
如果输入中文,可以看到,诸如世界这样的通用词汇以及奥利给这样的网红词汇都没有被正确分词
因此,我们可以不使用默认的分词器,而使用专为汉语打造的分词器。这样的分词器有很多,本文介绍的分词器叫IK。
5. 安装分词器IK及简单使用
打开IK github地址, 需要注意的是IK和Kibana是跟着ES进行迭代的,所以要和ES版本保持一致。
IK的官方文档已经介绍的很详细了。从连接处下载压缩包,然后解压缩到ElasticSearch文件夹下的plugin文件夹,
之后再重启ElasticSearch.bat即可。
可以看到IK插件已经成功被ES加载。
再次进入Kibana的开发工具,将standard
改为ik_smart
,然后执行原语句
可以看到世界、搜索、工具这种我们常用的词汇被正常分词了,但是像奥利给这样的网红词汇还是没有正常识别,被识别成了奥,利,给三个词。
究其原因,是因为分词工具底层依赖的是一个庞大的字典。而这个字典是人为维护的,且有可能很久没有更新。所以像奥利给这样的网红词汇没有存在于字典中,当然不会被正常识别了。
别担心,IK分词器支持我们自定义词汇和屏蔽词汇,打开ik插件下的config目录下的IKAnalyzer.config.xml
文件,这里指定了自定义词汇和屏蔽词汇的文件名,默认在同级目录下找,即在config目录下找。可以看到默认是空的
我们随意填写两个名字,
然后在config目录下创建这两个文件,
在extra_needword.dic文档里填写奥利给。
在extra_stopword.dic文档里填写是(诸如这样的语气词,嗯,啊,是,诶在搜索中被认为是无意义的词,都可以进行屏蔽)
重启ES服务。
此时再次执行原语句,发现奥利给被成功识别成了一个单词,且是不再出现。
分词方式除了ik_smart还有ik_max_word。ik_max_word代表最小粒度分词,以世界为例,除了能将世界识别为一个词汇,世和界也会单独被识别成两个字。
至此,我的第一篇ES入门文档就结束了。
关于IK分词器的更多用法不在本文进行赘述,感兴趣的小伙伴可以前往github自行浏览官方文档。
原创不易,转载请注明出处