IK分词器 整合solr4.7 含同义词、切分词、停止词

IK分词器如果配置成

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

本人测试切分词可以,但是同义词,扩展词库用不了,

网上查各种资料说IK分词器有个BUG,要自己把jar文件改一下,于是找到IK的源码,里面只有IKAnalyzer的源码,代码如下

package org.wltea.analyzer.lucene;

import java.io.Reader;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.Tokenizer;

/**
 * IK分词器,Lucene Analyzer接口实现
 * 兼容Lucene 4.0版本
 */
public final class IKAnalyzer extends Analyzer{

	private boolean useSmart;

	public boolean useSmart() {
		return useSmart;
	}

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

	/**
	 * IK分词器Lucene  Analyzer接口实现类
	 *
	 * 默认细粒度切分算法
	 */
	public IKAnalyzer(){
		this(false);
	}

	/**
	 * IK分词器Lucene Analyzer接口实现类
	 *
	 * @param useSmart 当为true时,分词器进行智能切分
	 */
	public IKAnalyzer(boolean useSmart){
		super();
		this.useSmart = useSmart;
	}

	/**
	 * 重载Analyzer接口,构造分词组件
	 */
	@Override
	protected TokenStreamComponents createComponents(String fieldName, final Reader in) {
		Tokenizer _IKTokenizer = new IKTokenizer(in , this.useSmart());
		return new TokenStreamComponents(_IKTokenizer);
	}

}

  

自己加了一个IKAnalyzerSolrFactory,代码如下

package org.wltea.analyzer.lucene;

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.AttributeSource.AttributeFactory;

public class IKAnalyzerSolrFactory extends TokenizerFactory{

    private boolean useSmart;

    public boolean useSmart() {
        return useSmart;
    }

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

     public IKAnalyzerSolrFactory(Map<String,String> args) {
         super(args);
         assureMatchVersion();
         this.setUseSmart(args.get("useSmart").toString().equals("true"));
       }

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

}

  这样一来就能在配置文件中配置成IKAnalyzerSolrFactory 的列子

下面是具体的配置描述:

1。修改IK的jar文件,加入IKAnalyzerSolrFactory (如果不会改的加我QQ 632132852问我要)

2.修改solrconfig.xml文件,加入

<lib dir="/contrib/analysis-extras/lib" regex=".*\.jar" />

3.修改schema.xml文件,加入

<!--IK分词器-->
	 <fieldType name="text_ik" class="solr.TextField">
        <analyzer type="index">
            <tokenizer class="org.wltea.analyzer.lucene.IKAnalyzerSolrFactory" useSmart="true"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="org.wltea.analyzer.lucene.IKAnalyzerSolrFactory" useSmart="true"/>
			<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        </analyzer>
    </fieldType>

4.在solr的webINFO 下的classes(没有新建)加入如下图,IK压缩文件中的部分文件,如图所示:

5.在ext.dic配置自定义词库,不需要切分词的词语配置在此,同义词写在synonyms.txt中即可。格式为:  通知,通告

注意每次改变词库或者同义词需要重启服务。

原文地址:http://www.cnblogs.com/wudi521/p/5558880.html

时间: 2024-10-08 21:21:25

IK分词器 整合solr4.7 含同义词、切分词、停止词的相关文章

solr4.x配置IK2012FF智能分词+同义词配置

本文配置环境:solr4.6+ IK2012ff +tomcat7 在Solr4.0发布以后,官方取消了BaseTokenizerFactory接口,而直接使用Lucene Analyzer标准接口TokenizerFactory.因此IK分词器2012 FF版本也取消了org.wltea.analyzer.solr.IKTokenizerFactory类. 这里IK的文档给了一个solr的配置如下: <fieldType name="text" class="solr

solr添加中文IK分词器,以及配置自定义词库

Solr是一个基于Lucene的Java搜索引擎服务器.Solr 提供了层面搜索.命中醒目显示并且支持多种输出格式(包括 XML/XSLT 和 JSON 格式).它易于安装和配置,而且附带了一个基于HTTP 的管理界面.Solr已经在众多大型的网站中使用,较为成熟和稳定.Solr 包装并扩展了Lucene,所以Solr的基本上沿用了Lucene的相关术语.更重要的是,Solr 创建的索引与 Lucene搜索引擎库完全兼容.通过对Solr 进行适当的配置,某些情况下可能需要进行编码,Solr 可以

三、Solr多核心及分词器(IK)配置

多核心的概念 多核心说白了就是多索引库.也可以理解为多个"数据库表" 说一下使用multicore的真实场景,比若说,产品搜索和会员信息搜索,不使用多核也没问题,这样带来的问题是 indexs文件很多,而且产品的索引文件和会员信息的索引文件混在一起,备份也是个问题. 如果使用了多核,那就很轻松了,产品和会员就可使用不同的URL进行提交了,业务上也很清晰,生成的索引文件也不会混在一起,也容易备份. ????每个索引库通过相对独立的url访问. ? 多核心的配置 还记得solr home吗

lucene构建同义词分词器

lucene4.0版本号以后 已经用TokenStreamComponents 代替了TokenStream流.里面包含了filter和tokenizer 在较复杂的lucene搜索业务场景下,直接网上下载一个作为项目的分词器,是不够的.那么怎么去评定一个中文分词器的好与差:一般来讲.有两个点.词库和搜索效率,也就是算法.  lucene的倒排列表中,不同的分词单元有不同的PositionIncrementAttribute,假设两个词之间PositionIncrementAttribute距离

IK分词器原理与源码分析

原文:http://3dobe.com/archives/44/ 引言 做搜索技术的不可能不接触分词器.个人认为为什么搜索引擎无法被数据库所替代的原因主要有两点,一个是在数据量比较大的时候,搜索引擎的查询速度快,第二点在于,搜索引擎能做到比数据库更理解用户.第一点好理解,每当数据库的单个表大了,就是一件头疼的事,还有在较大数据量级的情况下,你让数据库去做模糊查询,那也是一件比较吃力的事(当然前缀匹配会好得多),设计上就应当避免.关于第二点,搜索引擎如何理解用户,肯定不是简单的靠匹配,这里面可以加

solr4.5配置中文分词器mmseg4j

solr4.x虽然提供了分词器,但不太适合对中文的分词,给大家推荐一个中文分词器mmseg4j mmseg4j的下载地址:https://code.google.com/p/mmseg4j/ 通过以下几步就可以把mmseg4j分词器集成到solr中: 1.解压mmseg4j-1.9.1.zip,把dist下面的所有jar文件拷贝到你应用服务器下的solr/WEB-INF/lib中(如果你的应用服务器下面没有solr,请参考<solr部署到tomcat>). 2.拷贝data到solr_home

Solr(四)Solr实现简单的类似百度搜索高亮功能-1.配置Ik分词器

配置Ik分词器 一 效果图 二 实现此功能需要添加分词器,在这里使用比较主流的IK分词器. 1 没有配置IK分词器,用solr自带的text分词它会把一句话分成单个的字. 2 配置IK分词器,的话它会把句子分成词组 三 下载配置分词器 1 下载分词器IK 分词器下载地址: http://download.csdn.net/detail/u013292160/9926148 2 解压下载的文件 3 将ik-analyzer-solr5-5.x.jar这个jar包放入solr项目下的WEB-INF\

30.IK中文分词器的安装和简单使用

在之前我们学的都是英文,用的也是英文的standard分词器.从这一节开始,学习中文分词器.中国人基本上都是中文应用,很少是英文的,而standard分词器是没有办法对中文进行合理分词的,只是将每个中文字符一个一个的切割开来,比如说中国人 --> 中 国 人 在中方搜索引擎领域,比较成熟和流行的,就是ik分词器. 一.在elasticsearch中安装ik中文分词器 (1)git clone https://github.com/medcl/elasticsearch-analysis-ik (

Restful认识和 IK分词器的使用

什么是Restful风格 Restful是一种面向资源的架构风格,可以简单理解为:使用URL定位资源,用HTTP动词(GET,POST,DELETE,PUT)描述操作. 使用Restful的好处: 透明性,暴露资源存在. 充分利用 HTTP 协议本身语义. 无状态,这点非常重要.在调用一个接口(访问.操作资源)的时候,可以不用考虑上下文,不用考虑当前状态,极大的降低了复杂度. Restful的典型特征: ① Server提供的RESTful API中,URL中只使用名词来指定资源. “资源”是R