solr配置同义词,停止词,和扩展词库(IK分词器为例)
定義
同義詞:搜索結果里出現(xiàn)的同義詞。如我們輸入”還行”,得到的結果包括同義詞”還可以”。
停止詞:在搜索時不用出現(xiàn)在結果里的詞。比如is 、a 、are 、”的”,“得”,“我” 等,這些詞會在句子中多次出現(xiàn)卻無意義,所以在分詞的時候需要把這些詞過濾掉。
擴展詞:在搜索結果里額外出現(xiàn)的詞。擴展詞只能是你輸入詞的本身或子串。比如我們 輸入”重慶開縣人”,正常分詞得到的結果是“重慶” “開縣”“人”;當我們在擴展詞里加入“重慶開縣”時,分詞的結果是“重慶開縣”“重慶” “開縣”“人”。
配置同義詞
1.在solr_home的conf目錄下的schema.xml 中配置同義詞text_syn:
<!-- 配置IK分詞器的同義詞 --><fieldType name="text_syn" class="solr.TextField"><analyzer type="query"><tokenizer class="solr.WhitespaceTokenizerFactory"/><filter class="solr.LowerCaseFilterFactory"/></analyzer><analyzer type="index"><tokenizer class="solr.WhitespaceTokenizerFactory"/><filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false" /><filter class="solr.LowerCaseFilterFactory"/></analyzer> </fieldType>2.假定在solr_home的conf目錄下的schema.xml 中要對shortName字段進行同義詞配置,則我們需要將type屬性設為上向配置的”text_syn”
<field name="shortName" type="text_syn" indexed="true" stored="true" />3.在conf目錄下的 synonyms.txt 中增加同義詞,如:
這里我多說兩句:上面紅框里的 => 右側的詞是左側詞的同義詞,多個時用空格隔開。還有就是,最好不要直接打開synonyms.txt這個文件,因為加入的漢字在保存后會查不出來,因為txt不是UTF-8的格式保存的。
4.測試同義詞
輸入高興: 輸入中華:5.基于上面的問題,說下怎么解決,畢竟不論我們輸入中華還是中國,都能有對應的同義詞結果。
首先,我們將synonyms.txt里的同義詞用英文逗號隔開,然后將上面配置IK同義詞里的expand屬性設為true。
我們輸入:大大的,結果如下:
配置停止詞和擴展詞庫。
1.將IKAnalyzer解壓文件夾下的stopword.dic和IKAnalyzer.cfg.xml復制到tomcat/webapps/solr/WEB-INF/classes下,再新建一個ext.dic,里面的格式和stopword.dic一致。
2.修改IKAnalyzer.cfg.xml如下面的格式可以配置多個停止詞或者擴展詞庫文件。
<properties> <comment>IK Analyzer 擴展配置</comment><!--用戶可以在這里配置自己的擴展字典--><entry key="ext_dict">ext.dic;</entry><!--用戶可以在這里配置自己的擴展停止詞字典--><entry key="ext_stopwords">english_stopword.dic;stopword.dic</entry> <properties>輸入“重慶開縣”時,正常分詞是只有”重慶” “開縣”的
在ext.dic里添加了”重慶開縣”后,測試結果:
輸入“重慶開縣”時,正常分詞是只有”重慶” “開縣”的
在stopword.dic里添加了“開縣”之后,測試結果:
注意
字段如果要能被分詞,或是停止詞,或是擴展詞,需要在schema.xml里配置該字段時,給該字段的type屬性配成分詞類型,我們這里是text_ik,例:
<field name="companyName" type="text_ik" indexed="false" stored="true" multiValued="false" />總結
以上是生活随笔為你收集整理的solr配置同义词,停止词,和扩展词库(IK分词器为例)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 给solr配置中文分词器
- 下一篇: Servlet3.1 新增的非阻塞式IO