定制化中文分词器
对于搜索引擎来说,很多词都属于专有名字,比如凯悦,这是一个品牌,而对于分词器来说并不知道,所以对于凯悦的分词会是把两个字分开:
因此,我们需要定制分词词库。
扩展专有名词
首先来到es的config\analysis-ik目录下,新建new_word.dic,在里面写“凯悦”,注意编码格式。然后打开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">new_word.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
然后把这两处修改同步到其他节点上。重启es后再测试一下:
虽然配置成功了,但是在搜索的时候会发现是空的,这是因为配置上已经改了过来,但是在es索引中还是两个字分开的,所以需要更新索引,局部更新:
POST /shop/_update_by_query
{
"query":{
"bool":{
"must":[
{"term":{"name":"凯"}},
{"term":{"name":"悦"}}
]
}
}
}
这样,再搜索“凯悦”,就只会出来含有专有名词“凯悦”的结果了。