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. 使用設計
針對每個商品設定搜尋關鍵詞,同步到擴充套件詞庫中;
全域性設定不想被分詞的詞,放到停止詞庫中;
全域性設定想關聯的同義詞,放到同義詞中;