elasticsearch在相关度排序的时候可能并不能满足所有需求,在title全部命中时评分也不一定高于不完全命中的词汇。因此需要自定义分词,提高权重。
1、集成ik分词器(具体怎么集成请自行百度,这里不多说了)
2、/elasticsearch/plugins/ik/config# cat IKAnalyzer.cfg.xml 查看自定义分词文件
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">custom/mydict.dic;custom/single_word_low_freq.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">custom/ext_stopword.dic</entry>
<!--用户可以在这里配置远程扩展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
3、/elasticsearch/plugins/ik/config/custom# vi mydict.dic修改mydict.dic文件
/usr/share/elasticsearch/plugins/ik/config/custom# vi mydict.dic
medcl
elastic
elasticsearch
kogstash
kibana
marvel
shield
watcher
beats
packetbeat
filebeat
topbeat
metrixbeat
XXX
修改完文件之后保存退出,重启es集群,查询XXX,可以查出XXX在最上方(权重最高!)
注意:由于代码中指定集群setting为"ik_smart"粗粒度分词,在自定义分词之后不会对XXX分词查询,根据需求我选用了"ik_max_word"进行细粒度分词。
4、以下是我的验证
(做映射!!!)