当前位置: 首页 > solr, 搜索 > 正文

Solr4.0加入中文分词mmseg4j

1 星2 星3 星4 星5 星 (1 次投票, 评分: 5.00, 总分: 5)
Loading ... Loading ...
baidu_share

前提是已经在Tomcat7下面配置好Solr4.0,详情参考前面的文章。
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,在中增加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<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文件,在中修改如下内容:

1
2
3
4
<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

1
2
3
4
5
6
7
8
9
private int readerStatus;
 
 public int getReaderStatus() {
  return readerStatus;
 }
 
 public void setReaderStatus(int readerStatus) {
  this.readerStatus = readerStatus;
 }

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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,重建索引,查询即可。
现在最新版本的https://code.google.com/p/mmseg4j/downloads/detail?name=mmseg4j-1.9.1.v20130120-SNAPSHOT.zip 不用修改源码了

本文固定链接: http://www.chepoo.com/solr4-0-add-mmseg4j.html | IT技术精华网

Solr4.0加入中文分词mmseg4j:等您坐沙发呢!

发表评论