Solr4.10.2的IK Analyzer分词器配置

Solr4.10.2的IK Analyzer分词器配置


1. 准备工作

Solr4.10.2已经在Tomcat中配置好,具体见上一篇博文

 

2. 下载IK分词器

地址:http://code.google.com/p/ik-analyzer/downloads/list

下载IK Analyzer2012FF_hf1.zip和IK Analyzer2012 FF_SRC.rar两个文件

 

3. 解压IK Analyzer 2012FF_hf1.zip将jar包拷贝到之前配置的server\WEB-INF\lib目录下

 

4. 修改home\collection1\conf目录下的schema.xml文件

找一个合适的地方加入配置语句:

<!--IK-->
<fieldType name="text_ik" class="solr.TextField">
       <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

5. 启动Tomcat服务器访问http://localhost:8080/solr在Analysis中测试分词效果如下:

 


6. IKAnalzer默认采用最细粒度切分,如果要配合索引和搜索一般我们希望索引采用最细粒度切分,而搜索采用智能切分,按照说明配置如下:

<!--IK-->
<fieldType name="text_ik" class="solr.TextField">
              <analyzer type="index" class="org.wltea.analyzer.lucene.IKAnalyzer" useSmart="false"/>
              <analyzer type="query" class="org.wltea.analyzer.lucene.IKAnalyzer" useSmart="true"/>
</fieldType>

但配置启动后发现分词结果还是一样都采用了最细粒度切分,所以我们要手动解决这个问题,在网上找了一些资料尝试后发现一个有效的方法,这里就用到我们下载的第二个文件,即IK Analyzer 2012 FF_SRC源文件,解压后用MyEclipse创建新Java Project的方式将其打开。

 

7. 新建一个org.apache.solr.analysis包,然后建一个IKAnalyzerSolrTokenizerFactory类,代码如下:

package org.apache.solr.analysis;

import java.io.Reader;
import java.util.Map;

import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.util.TokenizerFactory;
import org.apache.lucene.util.AttributeFactory;
import org.wltea.analyzer.lucene.IKTokenizer;

/**

 * 解决IK Analyzer 2012FF_hf1 在solr4.x应用时,配置useSmart失效的问题

 * 

 * @author  lqin

 * @date 2013-12-24

 * @email  qin.liang@sinovatio.com

 * @version  1.0

 * 

 */

public class IKAnalyzerSolrTokenizerFactory extends TokenizerFactory {

	/**

	 * 构造函数,从参数里面读取配置

	 * @param args

	 */

	public IKAnalyzerSolrTokenizerFactory(Map<String, String> args) 
	{
		super(args);
		assureMatchVersion();
		// 设置分词力度,useSmart=true粗力度,useSmart=false细力度
		this.setUseSmart("true".equals(args.get("useSmart")));
	}

	private boolean useSmart;

	public boolean useSmart() 
	{
		return useSmart;
	}

	public void setUseSmart(boolean useSmart) 
	{
		this.useSmart = useSmart;
	}

	public void init(Map<String, String> args) {
		this.useSmart = "true".equals(args.get("useSmart")) ;
	}

	@Override

	public Tokenizer create(AttributeFactory factory, Reader input) 
	{
		Tokenizer _IKTokenizer = new IKTokenizer(input , this.useSmart);
		return _IKTokenizer;
	}
}


8. 利用MyEclipse的导出功能直接打包成jar包拷贝到server\WEB-INF\lib目录下

 

9. 将之前schema.xml里IK的配置改为:

<fieldType name="text_ik" class="solr.TextField">
       <analyzer type="index">
              <tokenizer class="org.apache.solr.analysis.IKAnalyzerSolrTokenizerFactory" useSmart="false"/>
       </analyzer>
       <analyzer type="query">
              <tokenizer class="org.apache.solr.analysis.IKAnalyzerSolrTokenizerFactory" useSmart="true"/>
       </analyzer>
</fieldType>

10. 重新启动Tomcat,测试如下即表示配置完成:



11. 如果要在索引或查询中使用让solr使用ik分词器的话还需要将schema.xml文件中所有type="text_general"全改为type="text_ik"


12. Solr4.10.2中文分词配置出错补充:尝试过程中遇到的问题基本都是版本问题,solr版本直接对分词的改动还是挺大的,要找到一个合适的分词器和合适版本的solr还真是不容易:

 


如果使用其他版本solr或者分词器进行配置的时候遇到上面的几个情况基本可以考虑更换solr版本或者分词器版本什么的,或者根据相应版本的规则自己动手写适配接口





参考资料:http://my.oschina.net/u/137332/blog/188215

本文固定连接:http://blog.csdn.net/fyfmfof/article/details/42122435

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值