【apache solr系列】jcseg與pinyinTokenFilter實現中文縮寫查找

轉載請註明:http://blog.csdn.net/weijonathan/article/details/40504029

今天要寫的是關於分詞查詢的。

我們先來看下下面這張圖


應該說很多做搜索的系統都會涉及到的一個話題;中文縮寫搜索,當你輸入相應的中文縮寫的時候,會給你提示相應的中文詞組

而現在網上各式各樣的文章都沒有多少能真正介紹如何實現的。經過前陣子的研究,我這邊整理一個我自己研究的效果,

先來看下相關插件以及下載地址:

jcseg下載地址及官網

下載地址:http://git.oschina.net/lionsoul/jcseg

官網地址:https://code.google.com/p/jcseg/

pinyinTokenFilter插件地址:

https://github.com/Jonathan-Wei/pinyinTokenFilter

jsceg是一箇中文分詞器,而pinyinTokenFilter是一個pinyin過濾器。

1、下載jcseg後解壓,將jcseg\output目錄中的jar包拷貝到solr的安裝目錄下

2、將jcseg的lexicon分詞庫放到apache-tomcat-7.0.53\webapps\solr\WEB-INF\classes目錄下並配置lexicon.path路徑

1)、jcseg默認的lexicon.path也就是分詞詞庫的位置是在solr發佈項目的lib目錄;所以可以選擇將壓縮包中的lexicon目錄拷貝到lib包底下

2)、配置lexicon.path配置到你指定的詞庫目錄

疑問:

這裏可能大家會問我爲什麼不用ik,原因是在Solr4.0發佈以後,官方取消了BaseTokenizerFactory接口,而直接使用Lucene Analyzer標準接口。因此IK分詞器2012 FF版本也取消了org.wltea.analyzer.solr.IKTokenizerFactory類。所以IK無法配置fliter節點;配置了之後啓動tomcat直接就報錯了;具體錯誤內容大家可以自己試驗下,我這裏就不具體展開了!

3、下載pinyinTokenFilter,(這個插件我做了一點修改,作者當前的項目存在bug,修改的內容不多,大家可以看我github上的提交修改內容)配置schame.xml添加以下配置

<fieldType name="text_pinyin" class="solr.TextField">
      <analyzer type="index">
          <tokenizer class="org.lionsoul.jcseg.solr.JcsegTokenizerFactory" mode="complex"/>
          <filter class="me.dowen.solr.analyzers.PinyinTransformTokenFilterFactory"
              isOutChinese="true" firstChar="true" minTermLength="1"/>
         <!--<filter class="me.dowen.solr.analyzers.PinyinTransformTokenFilterFactory"
              isOutChinese="true" firstChar="false" minTermLength="1"/>-->
          <filter class="solr.StopFilterFactory" ignoreCase="true"
              words="stopwords.txt" />
          <filter class="solr.LowerCaseFilterFactory" />
          <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
      </analyzer>
          <analyzer type="query">
          <tokenizer class="org.lionsoul.jcseg.solr.JcsegTokenizerFactory" mode="complex"/>
          <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"
              ignoreCase="true" expand="true" />
          <filter class="solr.StopFilterFactory" ignoreCase="true"
              words="stopwords.txt" />
          <filter class="solr.LowerCaseFilterFactory" />
      </analyzer>
  </fieldType>
這裏注意下,這個插件支持拼音全拼以及縮寫,但是當配置縮寫和全頻一起使用的時候,貌似不大好使。所以我這裏也只配置了一個縮寫,讓大夥看看效果;

看下參數的一些說明:

isOutChinese:是否保留原輸入中文詞元。可選值:true(默認)/false

firstChar:輸出完整拼音格式還是輸出簡拼。簡拼輸出是由原中文詞元的各單字的拼音結果的首字母組成的。可選值:true(默認)/false

minTermLength:僅輸出字數大於或等於minTermLenght的中文詞元的拼音結果。默認值爲2。

接下來看下solr中的分析結果:


這裏大夥可以看到,“猩球崛起“縮寫被分爲x,xq,xqj,xqjq,當你輸入這4個縮寫的時候它就會給你提示包含"猩球崛起"的內容;

接下來看下我們查詢結果:

可以看到,我輸入xqj進行查詢,是可以查到猩球崛起這個內容的。這裏猩球崛起是一個詞語,jcseg是支持自定義詞庫的,所以這裏我配置了自己的一個簡單的詞庫;

pinyinTokenFilter這個插件,如果不配合其他分詞器使用的話,用插件README裏面的方法進行測試,你是會看到你輸入的單詞會被分爲一個個單字的詞。README中使用的是

<tokenizer class="solr.StandardTokenizerFactory" />
pinyinTokenFilter這個插件還有不完全的地方,所以大夥使用過程中有什麼問題可以提下,我也跟蹤一下。謝謝。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章