WEB开发网
开发学院软件开发Java 利用SOLR搭建企业搜索平台 之二(中文分词) 阅读

利用SOLR搭建企业搜索平台 之二(中文分词)

 2009-09-10 00:00:00 来源:WEB开发网   
核心提示:这篇文章,主要说的是 怎么在solr中加入中文分词,利用SOLR搭建企业搜索平台 之二(中文分词),参考了一些文章,但是还是花了不少时间才搞出的,我采用的后面一种办法,只要每次固定好dic位置,可能是大侠们太牛了,所以很多细节东西都没有写出来!但是要指出的是很多文章都是抄来抄去的! 入正题: 在上面的一个文章中

这篇文章,主要说的是 怎么在solr中加入中文分词,参考了一些文章,但是还是花了不少时间才搞出的。可能是大侠们太牛了,所以很多细节东西都没有写出来!但是要指出的是很多文章都是抄来抄去的!

入正题:

在上面的一个文章中,已经使solr跑起来了,在上面的基础上,加入中文分词。我用的是paoding分词器!

1》请下好paoding分词器,下载地址:

http://code.google.com/p/paoding/downloads/list,在这里要非常感谢paoding作者:qieqie

在使用paoding的时候要注意:paoding的dic位置,也就是字典的位置,有两种办法解决:                    

1) 在系统环境变量中加入PAODING_DIC_HOME这个变量,值为paoding压缩包下面的dic的解压位置。

2)paoding-analysis.jar里面有个paoding-dic-home.properties文件,指定dic也可,但是要重新编译这个jar包,我采用的后面一种办法,只要每次固定好dic位置,部署还不是很不方便,设置环境变量我比较反感

2》建立文件

Java代码  

package com.yeedoo.slor.tokenizer; 
 
import java.io.Reader; 
import java.util.Map; 
 
import net.paoding.analysis.analyzer.PaodingTokenizer; 
import net.paoding.analysis.analyzer.TokenCollector; 
import net.paoding.analysis.analyzer.impl.MaxWordLengthTokenCollector; 
import net.paoding.analysis.analyzer.impl.MostWordsTokenCollector; 
import net.paoding.analysis.knife.PaodingMaker; 
 
import org.apache.lucene.analysis.TokenStream; 
import org.apache.solr.analysis.BaseTokenizerFactory; 
 
public class ChineseTokenizerFactory extends BaseTokenizerFactory { 
 
 /** 
 * 最多切分 默认模式 
 */ 
 public static final String MOST_WORDS_MODE = "most-words"; 
 
 /** 
 * 按最大切分 
 */ 
 public static final String MAX_WORD_LENGTH_MODE = "max-word-length"; 
 
 private String mode = null; 
 
 public void setMode(String mode) { 
 if (mode == null || MOST_WORDS_MODE.equalsIgnoreCase(mode) || "default".equalsIgnoreCase(mode)) { 
  this.mode = MOST_WORDS_MODE; 
 } else if (MAX_WORD_LENGTH_MODE.equalsIgnoreCase(mode)) { 
  this.mode = MAX_WORD_LENGTH_MODE; 
 } else { 
  throw new IllegalArgumentException("不合法的分析器Mode参数设置:" + mode); 
 } 
 } 
 
 @Override 
 public void init(Map<String,String> args) { 
 super.init(args); 
 setMode(args.get("mode").toString()); 
 } 
 
 public TokenStream create(Reader input) { 
 return new PaodingTokenizer(input, PaodingMaker.make(), createTokenCollector()); 
 } 
 
 private TokenCollector createTokenCollector() { 
 if (MOST_WORDS_MODE.equals(mode)) 
  return new MostWordsTokenCollector(); 
 if (MAX_WORD_LENGTH_MODE.equals(mode)) 
  return new MaxWordLengthTokenCollector(); 
 throw new Error("never happened"); 
 } 
 
}

1 2  下一页

Tags:利用 SOLR 搭建

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接