ElasticSearch分词器
所有的语言分词,默认使用的都是“Standard Analyzer”,但是这些分词器针对于中文的分词,并不友好。为此需要安装中文的分词器。下面以IK分词器为例:下载分词器# 进入ElasticSearch容器下载(或者在外部关联文件进行下载)docker exec -it elasticsearch /bin/bash# 下载分词器wget https://github.com/medcl/ela
·
所有的语言分词,默认使用的都是“Standard Analyzer”,但是这些分词器针对于中文的分词,并不友好。为此需要安装中文的分词器。
下面以IK分词器为例:
下载分词器
# 进入ElasticSearch容器下载(或者在外部关联文件进行下载)
docker exec -it elasticsearch /bin/bash
# 下载分词器
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.2/elasticsearch-analysis-ik-7.4.2.zip
# 解压分词器到ik目录中
unzip elasticsearch-analysis-ik-7.4.2.zip -d ik
# 移动ik到plugins目录下
mv ik plugins/
# 赋予ik目录权限
chmod -R 777 plugins/ik
# 重新启动es
docker restart elasticsearch
standard
默认分词器,不指定就是它。
GET _analyze
{
"analyzer": "standard",
"text":"我是中国人"
}
{
"tokens" : [
{
"token" : "我",
"start_offset" : 0,
"end_offset" : 1,
"type" : "<IDEOGRAPHIC>",
"position" : 0
},
{
"token" : "是",
"start_offset" : 1,
"end_offset" : 2,
"type" : "<IDEOGRAPHIC>",
"position" : 1
},
{
"token" : "中",
"start_offset" : 2,
"end_offset" : 3,
"type" : "<IDEOGRAPHIC>",
"position" : 2
},
{
"token" : "国",
"start_offset" : 3,
"end_offset" : 4,
"type" : "<IDEOGRAPHIC>",
"position" : 3
},
{
"token" : "人",
"start_offset" : 4,
"end_offset" : 5,
"type" : "<IDEOGRAPHIC>",
"position" : 4
}
]
}
ik_smart
会做最粗粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为中华人民共和国、人民大会堂。
GET _analyze
{
"analyzer": "ik_smart",
"text":"我是中国人"
}
{
"tokens" : [
{
"token" : "我",
"start_offset" : 0,
"end_offset" : 1,
"type" : "CN_CHAR",
"position" : 0
},
{
"token" : "是",
"start_offset" : 1,
"end_offset" : 2,
"type" : "CN_CHAR",
"position" : 1
},
{
"token" : "中国人",
"start_offset" : 2,
"end_offset" : 5,
"type" : "CN_WORD",
"position" : 2
}
]
}
ik_max_word
会将文本做最细粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为“中华人民共和国、中华人民、中华、华人、人民共和国、人民、共和国、大会堂、大会、会堂等词语。
GET _analyze
{
"analyzer": "ik_max_word",
"text":"我是中国人"
}
{
"tokens" : [
{
"token" : "我",
"start_offset" : 0,
"end_offset" : 1,
"type" : "CN_CHAR",
"position" : 0
},
{
"token" : "是",
"start_offset" : 1,
"end_offset" : 2,
"type" : "CN_CHAR",
"position" : 1
},
{
"token" : "中国人",
"start_offset" : 2,
"end_offset" : 5,
"type" : "CN_WORD",
"position" : 2
},
{
"token" : "中国",
"start_offset" : 2,
"end_offset" : 4,
"type" : "CN_WORD",
"position" : 3
},
{
"token" : "国人",
"start_offset" : 3,
"end_offset" : 5,
"type" : "CN_WORD",
"position" : 4
}
]
}
自定义词库
我想分词“乔碧萝殿下”,但是“乔碧萝”ik分词器词库可能没有。
所以这里我们要通过Nginx,它把当做一个静态服务器,把词库放到静态服务器上,es就可以读取到了。
安装Nginx
# 随便启动一个Nginx实例 为了获取它的配置
docker run -p80:80 --name nginx -d nginx:1.10
# 将nginx容器内的配置文件拷贝到/mydata下
docker container cp nginx:/etc/nginx /mydata
cd mydata/
# 把拷贝下来的文件夹改名
mv nginx conf
# 创建一个新的名为ngin的目录
mkdir nginx
# 把拷贝的配置已经去 这样就和启动Nginx时的配置文件的路径一致了
mv conf nginx
# 停止原来的容器 并删除掉
docker stop nginx
docker rm nginx
# 创建新的容器 挂载各种配置信息
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/conf/:/etc/nginx \
-d nginx:1.10
# 设置开机自动启动nginx
docker update nginx --restart=always
把词库放到Nginx目录中
mkdir /mydata/nginx/html/es
cd /mydata/nginx/html/es
# 在词库里面 输入 “乔碧萝”
echo "乔碧萝" > /mydata/nginx/html/fenci.txt
测试结果
GET _analyze
{
"analyzer": "ik_max_word",
"text":乔碧萝殿下"
}
{
"tokens" : [
{
"token" : "乔碧萝",
"start_offset" : 0,
"end_offset" : 3,
"type" : "CN_WORD",
"position" : 0
},
{
"token" : "殿下",
"start_offset" : 3,
"end_offset" : 5,
"type" : "CN_WORD",
"position" : 1
}
]
}
更多推荐
已为社区贡献1条内容
所有评论(0)