Lucene高版本(5.5.4) IKAnalyzer2012_u6版本Jar包修改方式

本文介绍如何在Maven项目中将IKAnalyzer2012_u6的依赖从Lucene4.7.2升级到Lucene5.5.4,并提供了具体的pom.xml配置示例及源码修改指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


Maven配置

清除IKAnalyzer2012_u6所依赖的Lucene4.7.2相关jar包

引入IKAnalyzer2012_u6所依赖的Lucene5.5.4相关jar包

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>cn.et</groupId>
  <artifactId>IkAnalyzerLucene</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <dependencies>
 	<dependency>  
        <groupId>com.janeluo</groupId>  
        <artifactId>ikanalyzer</artifactId>  
        <version>2012_u6</version>  
        <!-- 移除依赖的jar包 -->
        <exclusions>
        	<exclusion>
        		<groupId>org.apache.lucene</groupId>  
        		<artifactId>lucene-core</artifactId>  
        	</exclusion>
        	<exclusion>
        		<groupId>org.apache.lucene</groupId>  
        		<artifactId>lucene-queries</artifactId>  
        	</exclusion>
        	<exclusion>
        		<groupId>org.apache.lucene</groupId>  
        		<artifactId>lucene-sandbox</artifactId>  
        	</exclusion>
        	<exclusion>
        		<groupId>org.apache.lucene</groupId>  
        		<artifactId>lucene-analyzers-common</artifactId>  
        	</exclusion>
        	<exclusion>
        		<groupId>org.apache.lucene</groupId>  
        		<artifactId>lucene-queryparser</artifactId>  
        	</exclusion>
        </exclusions>
    </dependency>
    <dependency>
    	<groupId>org.apache.lucene</groupId>  
    	<artifactId>lucene-core</artifactId>  
    	<version>5.5.4</version>
    </dependency>
    <dependency>
    	<groupId>org.apache.lucene</groupId>  
    	<artifactId>lucene-queries</artifactId> 
    	<version>5.5.4</version> 
    </dependency>
    <dependency>
    	<groupId>org.apache.lucene</groupId>  
    	<artifactId>lucene-sandbox</artifactId>
    	<version>5.5.4</version>  
    </dependency>
    <dependency>
    	<groupId>org.apache.lucene</groupId>  
    	<artifactId>lucene-analyzers-common</artifactId>  
   		<version>5.5.4</version>
   	</dependency>
    <dependency>
    	<groupId>org.apache.lucene</groupId>  
    	<artifactId>lucene-queryparser</artifactId>  
   		<version>5.5.4</version>
   	</dependency>
  </dependencies>
  <build>
    <plugins>
	  <plugin>
	    <groupId>org.apache.maven.plugins</groupId>
	  	<artifactId>maven-compiler-plugin</artifactId>
	  	<configuration>
	  	  <source>1.7</source>
	  	  <target>1.7</target>
	  	  <encoding>UTF-8</encoding>
	  	</configuration>
	  </plugin>
    </plugins>
  </build>
</project>
重新写IKAnalyzer的jar包下org.wltea.analyzer.lucene下的IKANalyzer.java和IKTokenizer.java

package org.wltea.analyzer.lucene;

import java.io.Reader;

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

public final class IKAnalyzer extends Analyzer {

	private boolean useSmart;

	public boolean useSmart() {
		return useSmart;
	}

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

	public IKAnalyzer() {
		this(false);
	}

	public IKAnalyzer(boolean useSmart) {
		super();
		this.useSmart = useSmart;
	}

	/*
	//Lucene4.7.2
	@Override
	protected TokenStreamComponents createComponents(String fieldName, final Reader in) {
		Tokenizer _IKTokenizer = new IKTokenizer(in, this.useSmart());
		return new TokenStreamComponents(_IKTokenizer);
	}
	*/
	/**
	 *支持 Lucene5.5.4
	 * @author lucheng
	 */
	@Override
	protected TokenStreamComponents createComponents(String fieldName) {
		Tokenizer _IKTokenizer = new IKTokenizer(this.useSmart());
		return new TokenStreamComponents(_IKTokenizer);
	}

}
package org.wltea.analyzer.lucene;

import java.io.IOException;
import java.io.Reader;

import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
import org.apache.lucene.analysis.tokenattributes.TypeAttribute;

import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme;

public final class IKTokenizer extends Tokenizer {
	private IKSegmenter _IKImplement;
	private final CharTermAttribute termAtt;
	private final OffsetAttribute offsetAtt;
	private final TypeAttribute typeAtt;
	private int endPosition;
	
	/*
	//支持Lucene4.7.2
	public IKTokenizer(Reader in, boolean useSmart) {
		super(in);
		offsetAtt = addAttribute(OffsetAttribute.class);
		termAtt = addAttribute(CharTermAttribute.class);
		typeAtt = addAttribute(TypeAttribute.class);
		_IKImplement = new IKSegmenter(input, useSmart);
	}
	*/
	/**
	 * 支持Lucene5.5.4
	 * @author lucheng
	 */
	public IKTokenizer(boolean useSmart) {
		super();
		offsetAtt = addAttribute(OffsetAttribute.class);
		termAtt = addAttribute(CharTermAttribute.class);
		typeAtt = addAttribute(TypeAttribute.class);
		_IKImplement = new IKSegmenter(input, useSmart);
	}
	
	@Override
	public boolean incrementToken() throws IOException {
		clearAttributes();
		Lexeme nextLexeme = _IKImplement.next();
		if (nextLexeme != null) {
			termAtt.append(nextLexeme.getLexemeText());

			termAtt.setLength(nextLexeme.getLength());

			offsetAtt.setOffset(nextLexeme.getBeginPosition(), nextLexeme.getEndPosition());

			endPosition = nextLexeme.getEndPosition();

			typeAtt.setType(nextLexeme.getLexemeTypeString());

			return true;
		}
		return false;
	}

	@Override
	public void reset() throws IOException {
		super.reset();
		_IKImplement.reset(input);
	}
	@Override
	public final void end() {
		int finalOffset = correctOffset(this.endPosition);
		offsetAtt.setOffset(finalOffset, finalOffset);
	}
}

从Maven本地中仓库中将com.janeluo.ikanalyzer.2012_u6.ikanalyzer-2012_u6.jar复制出来用WinRAR打开,找到org.wltea.analyzer.lucene下的IKANalyzer.class和IKTokenizer.class


删除原有的IKANalyzer.class和IKTokenizer.class。

找到我们创建的org.wltea.analyzer.lucene包下修改后的IKANalyzer.java和IKTokenizer.java所编译后生成的class文件,将这两个class文件粘粘进去。


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值