中文分词
elasticsearch本身自带的中文分词,就是单纯把中文一个字一个字的分开,根本没有词汇的概念。但是实际应用中,用户都是以词汇为条件,进行查询匹配的,如果能够把文章以词汇为单位切分开,那么与用户的查询条件能够更贴切的匹配上,查询速度也更加快速。
分词器下载网址:https://github.com/medcl/elasticsearch-analysis-ik
安装
下载好的zip包,请解压后放到 /usr/share/elasticsearch/plugins/ik(可以不叫ik但是必须再此目录下,且不能出现其他的文件)
然后重启es
基于中文分词搭建索引
PS:添加了中文分词的词库之后,以后的type就不能使用默认的mapping了,默认的中文分词是一字一词的
注意下面的name用的是中文分词
PUT movie_chn
{
"mappings": {
"movie_type_chn":{
"properties": {
"id":{
"type": "long"
},
"name":{
"type": "text"
, "analyzer": "ik_smart"
},
"doubanScore":{
"type": "double"
},
"actorList":{
"properties": {
"id":{
"type":"long"
},
"name":{
"type":"keyword"
}
}
}
}
}
}
}
为什么要用远程词库?
过滤一些不能够出现的词语,以及一些流行词语。
实现方式:同将远程词库放在Nginx中当静态资源使用,这样添加的词语不用重启两个服务都就可以直接使用,
需要的配置:
修改/usr/share/elasticsearch/plugins/ik/config/中的IKAnalyzer.cfg.xml
IK Analyzer 扩展配置
http://192.168.67.163/fenci/myword.txt
修改
/usr/local/nginx/conf
中的nginx.conf
按照路径利用nginx发布静态资源
在nginx.conf中配置
server {
listen 80;
server_name 192.168.232.128;
location /fenci/ {
root es;
}
}
并且在/usr/local/nginx/下建/es/fenci/目录,目录下加myword.txt
myword.txt中编写关键词,每一行代表一个词。
访问成功
自定义分词成功