一、中文分词器安装
1.es默认只对英文语句做分词,中文不支持,每个中文字都会被拆分为独立的个体。(如果单个字匹配,计算匹配度,不需要分词)
如图:
内置分词器默认为:standard,单词会被拆分,大小会转换为小写,每个中文字都会被拆分为独立的个体。
2.安装合适中文分词器插件。
IKAnalyzer: 免费开源的java分词器,目前比较流行的中文分词器之一,简单,稳定,学习成本低,想要特别好的效果,需要自行维护词库,支持自定义词典。
github:https://github.com/medcl/elasticsearch-analysis-ik
作者:medcl。elastic项目组成员,Elastic中文社区维护者。
Linux安装:
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.0/elasticsearch-analysis-ik-6.3.0.zip
查看插件列表:sudo {ES_HOME}/bin/elasticsearch-plugin list
移除插件:sudo {ES_HOME}/bin/elasticsearch-plugin remove [pluginname]
注意:替换6.3.0为es版本号
Windows安装:
a.es文件夹插件文件新建ik文件夹。
b.对应版本下载对应的window包
c.解压到ik文件。将elascticsearch和kibana服务重启。
校验安装是否成功。
在Dev Tools中的Console界面的左侧输入命令,再点击绿色的执行按钮执行。
GET _analyze
{
"analyzer": "ik_max_word",
"text": "上海自来水来自海上"
}
安装前:
安装后:
看到这样的分词表示安装成功。
重点:ik的两种分词方式
ik_max_word:将文本做最细粒度的拆分。比如:上海自来水来自海上,拆分为:上海、自来水、自来、水、来自、海上。
ik_smart:最粗粒度的拆分。比如:上海自来水来自海上,拆分为:上海、自来水、来自、海上。
其他中文歧义识别都正常
比如:
这个人/手上/有痣、我们公司/人手/不足
乒乓球拍/卖/完了、乒乓球/拍卖/完了
原则:分词按最小粒度分,搜索按最大粒度分。
对应mapping配置:'name'=>['type'=>'text',"index"=>true,"analyzer"=>'ik_max_word','search_analyzer'=>'ik_smart']
3.自定义字典配置
新增文本词典:
目录:D:\elasticsearch-6.8.6\plugins\ik\config
编辑 IKAnalyzer.cfg.xml文件 引入
新增文件:custom/ext.dic 添加词条。
定义:盆底 盆底肌。需要重启es,若词条或者搜索不生效需要reindex。
定义之前:
定义之后:
调用es分词接口:
使用ik_max_word分词
Linux自定义词典与window一致,路径更加安装方式不一致,会有差别。
记一次重启es的坑:
find / -name elasticsearch 查找es相关安装信息。
es安装目录:/usr/share/elasticsearch。
测试安装好插件(pinyin)之后。
重启es:sudo /etc/init.d/elasticsearch restart
老是field。
通过:sudo /etc/init.d/elasticsearch status查询
报错 could not find java; set JAVA_HOME or ensure java is in PATH
java -version 显示版本 环境变量没问题
vim /ect/profile 查看java环境变量 /usr/local/java
查看es配置/etc/sysconfig/elasticsearch
发现# Elasticsearch Java path配置为空
引入java_home环境变量路径
sudo /etc/init.d/elasticsearch restart
running
记一次分词配置的坑:
路径与window不一致,通过命令安装,导致手动创建引入无效。
查找es运行日志文件:find / -name elasticsearch.log
日志文件路径:/var/log/elasticsearch/elasticsearch.log
通过看运行日志找到配置路径
/etc/elasticsearch/analysis-ik/IKAnalyzer.cfg.xml 巨坑
测试分词配置路径 /etc/elasticsearch/analysis-ik
自定义分词:custom/ext.dic
sudo /etc/init.d/elasticsearch restart
success
两次总结:根据日志排查问题,避免无从下手。
热更新添加分词(阿里后台可自定义添加分词):
二、拼音分词器安装
github:https://github.com/medcl/elasticsearch-analysis-pinyin
window与Linux安装一致。
下载对应es版本的分词器。
在扩展文件夹plugins新增pinyin文件。把下载的文件解压到该文件里。
重启es。
安装成功:
对应mapping配置
'question_name' => ['type'=>'text', 'index' => true, "analyzer"=>'pinyin', 'search_analyzer'=>'pinyin']
对应分词器配置说明
三、ik+pinyin组合分词实现
es可以自定义分词器。(文档)https://github.com/elasticsearch-cn/elasticsearch-definitive-guide
前提:已经安装ik+pinyin分词器。
配置:(重点)
自定义mapping和自定义分词器
理解:ik分词 然后将分词后的逐项结果通过filter交给拼音分词 。比如你好测试,ik会分成 你好、测试。然后你好交给pinyin会分词 ni,hao,nh,n,h 测试会分词 ce,shi,cs,c,s。
mapping中直接使用自定义的分词器。
'question_name' => ['type'=>'text', 'index' => true, "analyzer"=>'ik_pinyin_analyzer', 'search_analyzer'=>'ik_pingying_smark']
配置完成!
四、操作流程
1.执行脚本创建索引
2.数据同步到es
3.查询
4.高亮配置
5.结果
汉字
全拼音
拼音+汉字
拼音首字母
写在最后:这些对于es来说只是的海边的一个贝壳,还有大海等待我们去探索。
上一篇: [转]YII2 常用数据库操作...
下一篇: 没有了