Solr4:加入中文分词mmseg4j

2019-03-27 01:06|来源: 网路

前提是已经在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,重建索引,查询即可。

详情参考之前的文章。


转自:http://www.cnblogs.com/nayitian/archive/2013/01/18/2866737

相关问答

更多
  • 现有的分词算法可分为三大类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。 从基于字符串匹配的分词方法,中文分词的实现思路如下: 1 提供一个词典 2 在字符串中正向扫描或者反向扫描匹配 将字符串中多个字符取出后进行词典匹配 这个是效率最低的方式 另外就是基于统计方式,记录字与字一同出现的频率,实现分词
  • ik-analyzer查查这个吧,是一个JAVA分词器 但是你说的处理完保存在另一个文件里这些就得你自己写代码处理了。IK只提供分词功能
  • 这两天正好在玩lucene,没用庖丁 分词,主要是嫌它要配置环境,麻烦 下面是demo,记得要加lucene-core-2.3.2.jar和lucene-Analyzer.jar以及IKAnalyzer.jar这几个包,有问题call我 import java.io.Reader; import java.io.StringReader; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.StopFil ...
  • Solr 是一个可供企业使用的、基于 Lucene 的开箱即用的搜索服务器。对Lucene不熟?那么建议先看看下面两篇文档:   实战Lucene,第 1 部分: 初识 Lucene: http://www.ibm.com/developerworks/cn/java/j-lo-lucene1/   用Lucene加速Web搜索应用程序的开发: http://www.ibm.com/developerworks/cn/web/wa-lucene2/   一、 solr介绍   solr是基于Lucene J ...
  • 我常用 IKAnalyzer 分词, 至于庖丁分词 应该大同小异,你可以借鉴下 第一步,将 IKAnalyzer jar 放到 solr lib 文件夹下 第二步, solr core 的 schema.xml 定义一个自定义 类型,使用 IKAnalyzer 来解析(index&query) 第三步,此时 字段 就可以使用这个类型了 然后,就是些 IK的精细化 配置, 比如 同义词,词典 扩充等等,
  • StandardAnalyzer是可以用于中文分词,但它是一元分词,机械地将一个汉字做为一个词元来切分的,速度慢不说,语义也没有了,当然应该能保证查全率,呵呵. ChineseAnalyzer比它好一点,也相当于一元分词。 lucene的第三方分词包有很多,上面两个不建议使用。可以去了解: IK_CAnalyzer 庖丁解牛分词器 JE分词器
  • 我的方法是 内容传进来后,先用query进行分词,得到query后转成String,处理得到分词后的数组,遍历数组和域名,进行搜索。虽然比较麻烦,但是搜索出来的结果很好。
  • 如果您之前没有尝试过,可以按照故障排除SolR4索引进行操作 ,这可能有助于您解决问题。 此外,您可以始终尝试执行完整的SolR 4索引重建,如SolR 4索引中所述, 重建并监视有关SolR的应用程序服务器日志。 还要仔细了解如何配置搜索属性并记住它 属性的数据字典设置确定如何索引单个属性 If you didn't try before, you can follow the Troubleshooting SolR4 index which may help you to overcome your ...
  • 文档是一个很好的资源。 您可以在Alfresco服务器上运行安装程序,然后在Solr服务器上再次运行它。 在Alfresco服务器上,删除solr4 WAR。 在Solr服务器上,删除除Solr4 WAR之外的所有内容。 在alf_data中,有两个服务器上需要相同的密钥库目录。 您需要在Alfresco框中编辑alfresco-global.properties以指向Solr主机。 而且,您需要编辑Solr框中的alfresco-global.properties以指向solr索引。 在文档和这些提示之间 ...
  • 选择DataImportHandler。 下载postgresql的jdbc驱动程序并将其放在dist / dir中 将模块添加到配置文件: 按照Solr wiki的说明进行操作 请记住在scheme.xml中声明您的方案 在30分钟内完成。 Opte ...