Solr4:加入中文分词mmseg4j

前提是已经在Tomcat7下面配置好Solr4.0,详情参考:Solr4:Tomcat7下面配置Solr
1.下载mmseg4j
下载地址:http://code.google.com/p/mmseg4j/downloads/list,目前mmseg4j的mmseg4j-1.9.0-SNAPSHOT版本支持Solr4.0,但仍然需要做相关改动。
2.解压mmseg4j-1.9.0.v20120712-SNAPSHOT.zip
用到下面文件:
mmseg4j-all-1.9.0.v20120712-SNAPSHOT.jar 放到之前安装$CATALINA_HOME/webapps/solr/WEB-INF/lib/目录下
data 目录,建议拷贝下面内容到$SOLR_HOME\collection1\conf\mm4jdic
3.设置mmseg4j中文分词
修改$SOLR_HOME/collection1/conf/schema.xml,在<types></types>中增加如下内容: 

<fieldType name="textComplex" class="solr.TextField" >
   <analyzer>
     <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="C:/solr/collection1/conf/mm4jdic"/>
   </analyzer>
  </fieldType>
  <fieldType name="textMaxWord" class="solr.TextField" >
   <analyzer>
     <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" dicPath="C:/solr/collection1/conf/mm4jdic"/>
   </analyzer>
  </fieldType>
  <fieldType name="textSimple" class="solr.TextField" >
   <analyzer>
     <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="C:/solr/collection1/conf/mm4jdic"/>
   </analyzer>
  </fieldType>  

修改$SOLR_HOME/collection1/conf/schema.xml文件,在<fields></fields>中修改如下内容:

  <field name="content" type="textSimple" indexed="false" stored="true" multiValued="true"/>
  <field name="text" type="textSimple" indexed="true" stored="false" multiValued="true"/>
   ......
  <copyField source="content" dest="text"/>

也可以自己增加删除相关字段。
4.修改mmseg4j的小BUG
以下内容参考:http://wxf4150.blog.163.com/blog/static/111380836201292911234802/
修改mmseg4j源代码中的MMSeg.java,增加属性readerStatus并增加相关Setters与Getters

 private int readerStatus;
 
 public int getReaderStatus() {
  return readerStatus;
 }

 public void setReaderStatus(int readerStatus) {
  this.readerStatus = readerStatus;
 }

修改mmseg4j源代码中的MMSegTokenizer.java,

 public void reset(Reader input) throws IOException {
  //super.reset(input);
  super.setReader(input);
  mmSeg.reset(input);
 }
 
 ......
 @Override
 public boolean incrementToken() throws IOException {
  clearAttributes();
  
  if(mmSeg.getReaderStatus() == 1) {
   mmSeg.reset(this.input);
   mmSeg.setReaderStatus(0);
  }
  
  Word word = mmSeg.next();
  if(word != null) {
   //lucene 3.0
   //termAtt.setTermBuffer(word.getSen(), word.getWordOffset(), word.getLength());
   //lucene 3.1
   termAtt.copyBuffer(word.getSen(), word.getWordOffset(), word.getLength());
   offsetAtt.setOffset(word.getStartOffset(), word.getEndOffset());
   typeAtt.setType(word.getType());
   return true;
  } else {
   end();
   
   mmSeg.setReaderStatus(1);
   
   return false;
  }
 }

上述两个文件编译后,加入到mmseg4j-all-1.9.0.v20120712-SNAPSHOT.jar包中。  
5.启动Tomcat,重建索引,查询即可。

详情参考之前的文章。

posted @ 2013-01-18 17:14  那些年的事儿  阅读(1401)  评论(0编辑  收藏  举报