solr搜索分詞優化


solr服務器配置好在搜索時經常會搜出無關內容,把不該分的詞給分了,導致客戶找不到自己需要的內容,那么我們就從配置詞典入手解決這個問題。

首先需要知道自帶的詞典含義:

停止詞:停止詞是無功能意義的詞,比如is   、a   、are  、”的”,“得”,“我” 等,這些詞會在句子中多次出現卻無意義,所以在分詞的時候需要把這些詞過濾掉。

擴展詞庫:就是不想讓哪些詞被分開,讓他們分成一個詞。

同義詞:假設有一個電子商務系統,銷售書籍,提供了一個搜索引擎,一天,市場部的人要求客戶在搜索書籍時,同義詞就是比如輸入“電子”,除了展示電子相關的書籍,還需要展現“機器”相關的書籍。

 

1. 配置停止詞和擴展詞庫。

將IKAnalyzer解壓文件夾下的stopword.dic和IKAnalyzer.cfg.xml復制到tomcat/webapps/solr/WEB-INF/classes下,再新建一個ext.dic,里面的格式和stopword.dic一致。

並修改IKAnalyzer.cfg.xml如下面的格式可以配置多個停止詞或者擴展詞庫文件。

<!-- lang: xml -->
<properties> 
<comment>IK Analyzer 擴展配置</comment>
<!--用戶可以在這里配置自己的擴展字典-->
<entry key="ext_dict">ext.dic;</entry>
<!--用戶可以在這里配置自己的擴展停止詞字典-->
<entry key="ext_stopwords">english_stopword.dic;stopword.dic</entry>

2.同義詞配置

在solr數據文件conf目錄下schema.xml 中加入以下兩個字段:

<!-- lang: xml -->
<field name="id" type="string" indexed="true" stored="true" required="true" />
<field name="description" type="text_syn" indexed="true" stored="true" />

在 schema.xml 中增加 text_syn 類型的定義:

<!-- lang: xml -->
<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>

在相同的conf目錄下的 synonyms.txt 中增加

西安,長安,13朝古都,陝西省會

那么在下次搜索西安時也會帶出后面的。

3. 使用設計

針對每個商品設置搜索關鍵詞,同步到擴展詞庫中;

全局設置不想被分詞的詞,放到停止詞庫中;

全局設置想關聯的同義詞,放到同義詞中;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM