本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!
正文本专栏目录结构和文献引用请见1000个问题搞定大数据技术体系
ES默认对英文文本的分词器支持较好,但和lucene一样,如果需要对中文进行全文检索,那么需要使用中文分词器,同lucene一样,在使用中文全文检索前,需要集成IK分词器。
那么我们接下来就来安装IK分词器,以实现中文的分词
第一步:三台机器安装IK分词器- 将安装包上传到node01机器的/home/es路径下
安装包 CSDN 地址
- 将ik分词器的插件,解压到对应路径下
cd /opt/bigdata/soft mkdir -p /opt/bigdata/install/elasticsearch-6.7.0/plugins/analysis-ik unzip elasticsearch-analysis-ik-6.7.0.zip -d /opt/bigdata/install/elasticsearch-6.7.0/plugins/analysis-ik/
- 将安装包分发到其他机器上,node01机器执行以下命令进行安装包的分发
cd /opt/bigdata/install/elasticsearch-6.7.0/plugins scp -r analysis-ik/ node02:$PWD scp -r analysis-ik/ node03:$PWD
- 三台机器都配置完成,配置完成之后,需要重启服务。
三台机器执行以下命令停止es服务并重启es服务
ps -ef|grep elasticsearch | grep bootstrap | awk '{print $2}' |xargs kill -9
nohup /opt/bigdata/install/elasticsearch-6.7.0/bin/elasticsearch 2>&1 &
第二步、创建索引库并配置IK分词器
delete iktest
PUT /iktest?pretty
{
"settings" : {
"analysis" : {
"analyzer" : {
"ik" : {
"tokenizer" : "ik_max_word"
}
}
}
},
"mappings" : {
"article" : {
"dynamic" : true,
"properties" : {
"subject" : {
"type" : "text",
"analyzer" : "ik_max_word"
}
}
}
}
}
第三步、查看分词效果说明:在创建索引库的时候,我们指定分词方式为ik_max_word,会对我们的中文进行最细粒度的切分
在kibana当中执行以下查询,并验证分词效果
GET _analyze?pretty
{
"analyzer": "ik_max_word",
"text": "拜登是美国总统"
}
第四步、插入测试数据
POST /iktest/article/_bulk?pretty
{ "index" : { "_id" : "1" } }
{"subject" : ""闺蜜"崔顺实被韩检方传唤 韩总统府促彻查真相" }
{ "index" : { "_id" : "2" } }
{"subject" : "韩举行"护国训练" 青瓦台:决不许国家安全出问题" }
{ "index" : { "_id" : "3" } }
{"subject" : "媒体称FBI已经取得搜查令 检视希拉里电邮" }
{ "index" : { "_id" : "4" } }
{"subject" : "村上春树获安徒生奖 演讲中谈及欧洲排外问题" }
{ "index" : { "_id" : "5" } }
{"subject" : "希拉里团队炮轰FBI 参院民主党领袖批其”违法”" }
查看分词器
对"希拉里和韩国"进行分词查询
ikmaxword分词后的效果:希|拉|里|希拉里|和|韩国
POST /iktest/article/_search?pretty
{
"query" : { "match" : { "subject" : "希拉里和韩国" }},
"highlight" : {
"pre_tags" : [""],
"post_tags" : [""],
"fields" : {
"subject" : {}
}
}
}
第五步、配置热词更新
查看分词效果
GET _analyze?pretty
{
"analyzer": "ik_max_word",
"text": "小老弟,你怎么肥事,老铁你来了!!!"
}
WHY?
我们会发现,随着时间的推移和发展,有些网络热词我们并不能进行分词,因为网络热词并没有定义在我们的词库里面,这就需要我们经常能够实时的更新我们的网络热词,我们可以通过tomcat来实现远程词库来解决这个问题。
1、node03配置Tomcat使用hadoop用户来进行配置tomcat,此处我们将tomcat装在node03机器上面即可,将我们的tomcat安装包上传到node03服务器的/opt/bigdata/soft路径下,然后进行解压
cd /opt/bigdata/soft/ tar -zxf apache-tomcat-8.5.34.tar.gz -C /opt/bigdata/install/
tomcat当中添加配置hot.dic
cd /opt/bigdata/install/apache-tomcat-8.5.34/webapps/ROOT vi hot.dic 老铁 肥事
启动tomcat
cd /opt/bigdata/install/apache-tomcat-8.5.34/ bin/startup.sh
浏览器访问以验证tomcat是否安装成功
wget http://node03:8080/hot.dic
如果能够访问到,则证明tomcat安装成功
2、 三台机器修改配置文件三台机器都要修改es的配置文件(使用es用户来进行修改即可)
第一台机器node01修改es的配置
cd /opt/bigdata/install/elasticsearch-6.7.0/plugins/analysis-ik/config vim IKAnalyzer.cfg.xml
IK Analyzer 扩展配置 http://node03:8080/hot.dic
修改完成之后拷贝到node02与node03机器上面去
node01执行以下命令进行拷贝
cd /opt/bigdata/install/elasticsearch-6.7.0/plugins/analysis-ik/config scp IKAnalyzer.cfg.xml node02:$PWD scp IKAnalyzer.cfg.xml node03:$PWD3、三台机器重新启动es
三台机器重新启动es服务,三台机器先使用kill -9杀死es的服务,然后再执行以下命令进行重启
ps -ef|grep elasticsearch | grep bootstrap | awk '{print $2}' |xargs kill -9
nohup /opt/bigdata/install/elasticsearch-6.7.0/bin/elasticsearch 2>&1 &
在kibana当中执行以下命令,查看我们的分词过程
GET _analyze?pretty
{
"analyzer": "ik_max_word",
"text": "小老弟,你怎么肥事,老铁你来了"
}



