一、词典使用
### --- 词典使用
~~~ # 扩展词:
~~~ 就是不想让哪些词被分开,让他们分成一个词。比如上面的江大桥
~~~ # 停用词:
~~~ 有些词在文本中出现的频率非常高。但对本文的语义产生不了多大的影响。
~~~ 例如英文的a、an、the、of等。或中文的”的、了、呢等”。这样的词称为停用词。
~~~ 停用词经常被过滤掉,不会被进行索引。
~~~ 在检索的过程中,如果用户的查询词中含有停用词,系统会自动过滤掉。
~~~ 停用词可以加快索引的速度,减少索引库文件的大小。
~~~ 扩展词与停用词集中存储到hadoop02服务器上,
~~~ 使用web服务器集中管理,避免每个节点维护一份自己的词典
二、Hadoop02部署扩展词维护服务:Tomcat
### --- hadoop02部署Tomcat:以下操作使用es用户
~~~ # hadoop02:为避免权限问题上传到此目录下:/opt/yanqi/servers/es/
[es@hadoop02 ~]$ cd /opt/yanqi/servers/es/
[es@hadoop02 es]$ tar -zxvf apache-tomcat-8.5.59.tar.gz
[es@hadoop02 es]$ mv apache-tomcat-8.5.59 tomcat
### --- 配置自定义词典文件:自定义扩展词库
~~~ # 自定义扩展词库
[es@hadoop02 ~]$ vim /opt/yanqi/servers/es/tomcat/webapps/ROOT/ext_dict.dic
~~~写入如下参数
江大桥
### --- 配置自定义词典文件:自定义停用词
~~~ # 自定义停用词
[es@hadoop02 ~]$ vim /opt/yanqi/servers/es/tomcat/webapps/ROOT/stop_dict.dic
~~~写入如下参数
的
了
啊
### --- 启动tomcat
~~~ # 启动tomcat服务
[es@hadoop02 ~]$ /opt/yanqi/servers/es/tomcat/bin/startup.sh
### --- 通过web-UI访问:
~~~ # 通过web-UI访问tomcat配置文件
~~~ http://hadoop02:8080/ext_dict.dic
~~~ http://hadoop02:8080/stop_dict.dic
三、配置IK分词器
### --- 添加自定义扩展/停用词典
~~~ # hadoop01~03修改配置参数:添加自定义扩展,停用词典;使用root用户修改,或者直接把整个文件夹改为es用户所有!!
[es@hadoop02 ~]$ vim /opt/yanqi/servers/es/elasticsearch/plugins/analysis-ik/config/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://hadoop02:8080/ext_dict.dic</entry>
<!--用户可以在这里配置远程扩展停止词字典-->
<entry key="remote_ext_stopwords">http://hadoop02:8080/stop_dict.dic</entry>
</properties>
~~~ # 发送到其它节点
[es@hadoop02 ~]$ rsync-script /opt/yanqi/servers/es/elasticsearch/plugins/analysis-ik/config/IKAnalyzer.cfg.xml
### --- 重启es服务
~~~ # hadoop01~03重启es服务:使用es用户
[es@hadoop02 ~]$ ps -ef|grep elasticsearch|grep bootstrap |awk '{print $2}' |xargs kill -9
[es@hadoop02 ~]$ nohup /opt/yanqi/servers/es/elasticsearch/bin/elasticsearch >/dev/null 2>&1 &
~~~ # 重启kibana服务
[es@hadoop02 ~]$ nohup /opt/yanqi/servers/es/kibana/bin/kibana >/dev/null 2>&1 &
四、验证词典是否生效
### --- 验证扩展词典是否生效
~~~ # 分词器拆分json串
POST _analyze
{
"analyzer": "ik_max_word",
"text": "南京市长江大桥"
}
~~~ # 输出结果:
~~~省略部分参数:江大桥被当做关键字输出
{
"token" : "江大桥",
"start_offset" : 4,
"end_offset" : 7,
"type" : "CN_WORD",
"position" : 5
},
~~~省略部分参数
### --- 验证停用词典是否生效
~~~ # 分词器拆分json串
POST _analyze
{
"analyzer": "ik_max_word",
"text": "的了啊"
}
~~~ # 输出结果:
~~~输出参数为空:停止词的了啊是不会被使用的
{
"tokens" : [ ]
}
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor