最近,很多朋友問我solr 中文分詞配置的問題,都不知道怎么配置,怎么使用,原以為很簡單,沒想到這么多朋友都有問題,所以今天就總結總結中文分詞的配置吧。
有的時候,用戶搜索的關鍵字,可能是一句話,不是很規范。所以在 Solr 中查詢出的時候,就需要將用戶輸入的關鍵字進行分詞。
目前有很多優秀的中文分詞組件。本篇只以 IKAnalyzer 分詞為例,講解如何在 solr 中及集成中文分詞,使用 IKAnalyzer的原因 IK 比其他中文分詞維護的勤快,和 Solr 集成也相對容易。具體就不多介紹,這里直接solr 集成 IK 的方法。
1. 首先,下載IKAnalyzer ,下載
注意:以前老的IK 不支持Solr 5.3的版本 ,請注意下載最新的。
2. 將ik的相關文件 拷貝到 webapps\solr\WEB-INF\lib 目錄下
3. 在 solr_home\mycore1\conf\schema.xml 增加如下配置
<!-- 我添加的IK分詞 -->
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
<analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
同時,把需要分詞的字段,設置為text_ik,
<field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" /> <field name="name" type="text_ik" indexed="true" stored="true" required="true" multiValued="false" /> <field name="title" type="text_ik" indexed="true" stored="true" required="true" multiValued="false" /> <field name="category" type="int" indexed="true" stored="true" required="true" multiValued="false" /> <field name="content" type="text_ik" indexed="true" stored="true" required="true" multiValued="false" /> <field name="price" type="double" indexed="true" stored="true" required="true" multiValued="false" /> <field name="color" type="string" indexed="true" stored="true" required="true" multiValued="false" /> <field name="orderBy" type="int" indexed="true" stored="true" required="true" multiValued="false" /> <field name="updatetime" type="date" indexed="true" stored="true" required="true" multiValued="false" />
4. 重啟服務
注意:如果之前已經創建了索引,需要將之前的索引刪掉,重新創建分詞后的索引。
5. 在admin后台, analysis 下查看分詞效果
1. 中文分詞效果

2. 索引查詢效果

6. 配置IKAnalyzer分詞器的擴展詞典,停止詞詞典
1. 將 文件夾下的IKAnalyzer.cfg.xml , ext.dic和stopword.dic 三個文件 復制到/webapps/solr/WEB-INF/classes 目錄下,並修改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">ext.dic;</entry> <!--用戶可以在這里配置自己的擴展停止詞字典--> <entry key="ext_stopwords">stopword.dic;</entry> </properties>
2. 在ext.dic 里增加自己的擴展詞典,例如,嬰兒奶粉3段

注意: 記得將stopword.dic,ext.dic的編碼方式為UTF-8 無BOM的編碼方式。
