介紹
在使用elasticsearch進行搜索業務的時候,發現一篇和搜索關鍵字完全不匹配的文章排在最前面.打開它發現原來是這篇文章含有非常多的"的"這個無意義的詞.而我的搜索關鍵字假設為"歷史上的
今天",它可能就被ik_max_word分詞后,剛好就有"的"這個詞.所以會造成一篇含有很多"的"的文章,即使跟搜索關鍵字無關,也可能得分很高,排在前面.
那么我們需要做的就是如何對這些無意義的詞——停用詞進行屏蔽.
操作
其實這個問題很好解決,如果你使用ik分詞器,其實都為你解決了.但是它默認設置的停用詞都是英文的,比如AND,OR等等
那么在哪里配置呢?找到你的es安裝插件的文件夾,進入ik分詞器的配置文件中,比如我的是
D:\elasticsearch-7.0.0\plugins\ik\config
打開它發現會有stopword.dic和extra_stopword.dic
打開會發現stopword.dic里面的都為配置的英文停用詞,而extra_stopword.dic里面的都為配置的中文停用詞
但是我發現在extra_stopword.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"></entry> <!--用戶可以在這里配置自己的擴展停止詞字典--> <entry key="ext_stopwords">extra_stopword.dic</entry> <!--用戶可以在這里配置遠程擴展字典 --> <!-- <entry key="remote_ext_dict">words_location</entry> --> <!--用戶可以在這里配置遠程擴展停止詞字典--> <!-- <entry key="remote_ext_stopwords">words_location</entry> --> </properties>
如此便配置好了
我們再次搜索就會驚喜的發現,那篇含有無意義的詞的文章便搜索不到了.