我们在搜索的时候,都会对数据进行分词,英文的分词很简单,我们可以直接按照空格进行切分即可,

但是中文的分词太过复杂,例如:夏天太热,能穿多少穿多少,冬天太冷,能穿多少穿多少。

下雨地滑,还好我一把把车把把住了,才没有摔倒。人要是行,干一行行一行,一行行行行行等等的分词都是非常麻烦的,所以针对中文的分词,专门出了一个叫做IK的分词器来解决对中文的分词问题。

 

安装

每台机器都要配置。配置完成之后,需要重启ES服务

将安装包上传到node01机器的/home/es路径下

cd /home/es
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.7.0/elasticsearch-analysis-ik-6.7.0.zip
# 将ik分词器的插件,上传到/home/es目录下
cd /home/es 
mkdir  /export/servers/es/elasticsearch-6.7.0/plugins/analysis-ik/
unzip elasticsearch-analysis-ik-6.0.0.zip -d /export/servers/es/elasticsearch-6.0.0/plugins/analysis-ik/

 

将安装包分发到其他机器上
node01机器执行以下命令进行安装包的分发
cd /export/servers/es/elasticsearch-6.0.0/plugins
scp -r analysis-ik/ node02:$PWD
scp -r analysis-ik/ node03:$PWD
# 三台机器都配置完成
# 配置完成之后,需要重启ES服务。
 
三台机器重启es服务
三台机器执行以下命令停止es服务
 
ps -ef|grep elasticsearch|grep bootstravelap |awk '{print $2}' |xargs kill -9
nohup /export/servers/es/elasticsearch-6.0.0/bin/elasticsearch >/dev/null 2>&1 &

 

配置

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带有两个分词器:

  • ikmaxword :会将文本做最细粒度的拆分;尽可能多的拆分出词语
  •  
  • 我|爱|我的|祖|国|祖国
  • ik_smart:会做最粗粒度的拆分;已被分出的词语将不会再次被其它词语占有
  •  
  • 我|爱|我|的|祖国

 

查看分词效果

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" : ["<font color=red>"],
        "post_tags" : ["</font>"],
        "fields" : {
            "subject" : {}
        }
    }
}、热词更新
 
查看分词效果
 
    

  GET _analyze?pretty
  {
    "analyzer": "ik_max_word",
    "text": "吴邪在哪里"
  }

luccess 分词器 elk分词器_java

 

使用es用户来进行配置tomcat,此处我们将tomcat装在node03机器上面即可
cd /home/es
tar -zxvf apache-tomcat-8.5.34.tar.gz -C /export/servers/es/
tomcat当中添加配置hot.dic
cd /export/servers/es/apache-tomcat-8.5.34/webapps/ROOT/
vi hot.dic

传智播客

# 启动tomcat
/export/servers/es/apache-tomcat-8.5.34/bin/startup.sh 
浏览器访问
wget http://node03:8080/hot.dic
三台机器修改配置文件
三台机器都要修改es的配置文件(使用es用户来进行修改即可)
第一台机器node01修改es的配置
cd /export/servers/es/elasticsearch-6.0.0/plugins/analysis-ik/config
vim IKAnalyzer.cfg.xml


 


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

 
    
 
修改完成之后拷贝到node02与node03机器上面去
node01执行以下命令进行拷贝
cd /export/servers/es/elasticsearch-6.0.0/plugins/analysis-ik/config
sudo scp IKAnalyzer.cfg.xml  node02:$PWD
sudo scp IKAnalyzer.cfg.xml  node03:$PWD
 
三台机器修改JDK权限
三台机器修改jdk的权限问题
第一台机器执行以下命令修改jdk的权限问题
#修改JDK安全设置
cd /export/servers/jdk1.8.0_141/jre/lib/securitysudo vim java.policy
添加以下四行配置
 
    

 permission java.net.SocketPermission "192.168.52.120:8080","accept";
 permission java.net.SocketPermission "192.168.52.120:8080","listen";
 permission java.net.SocketPermission "192.168.52.120:8080","resolve";
 permission java.net.SocketPermission "192.168.52.120:8080","connect";
 
    
 
修改完成之后拷贝到第二台和第三台机器
node01执行以下命令拷贝到第二台和第三台
cd /export/servers/jdk1.8.0_141/jre/lib/security
sudo scp java.policy  node02:$PWD
sudo scp java.policy  node03:$PWD
 
http://mahilion.blog.163.com/blog/static/1830872952012101225243655/
 
三台机器重新启动es
三台机器重新启动es服务,三台机器先使用kill -9杀死es的服务,然后再执行以下命令进行重启
cd /export/servers/es/elasticsearch-6.0.0/
nohup bin/elasticsearch >/dev/null 2>&1 &
查看我们的分词过程
 
    

  GET _analyze?pretty
  {
    "analyzer": "ik_max_word",
    "text": "吴邪在哪里"
  }