问题描述
新增停用词典的内容配置为:
一个男孩
一个女孩
通过热更新方式上传到了停用词库,实例重启后通过验证搜索,"一个女孩" 没有生效,如(图1),还是被检索到并分词返回了,另外一个停用词,"一个男孩" 就是生效的,如(图2)
问题原因
IK查询停用词召回的时候会先将查询词根据分词词库配置进行分词,比如"一个女孩"这个词会被分为"一个","女孩",之后会根据停用词库去看是否"一个","女孩"两个词再库内,如在库内就不会召回。
由于"一个女孩"这个词未在分词词库中配置,所以搜索的时候会分词为"一个","女孩"两个词,然后再使用停用词库去匹配就匹配不到。而"一个男孩"这个词再默认的主分词词库中就存在,所以不会进行分词,最后可以在停用词库匹配到"一个男孩"这个词,所以不会被召回。其过程是:先分词然后再根据分词的结果去匹配停用词库。
解决方案
不是配置的停用词没有生效,而是查询的过程中进行分词了分词的结果匹配不到停用词配置的"一个女孩"。解决办法是分词词库把"一个女孩"添加进入,后面搜索的时候就会发现该词不会被召回了。
适用范围
检索分析服务Elasticsearch版