Solr4 지원 IKtokenizerFactory

3048 단어 LuceneIKAnalyzersolr4
최근 회사에서 기존의 검색 시스템을 개조하여 Solr4에 사용하기 시작했고 본인은 IK분사기에 관심이 비교적 많다.IK 2012가 Tokenizer Factory에 대해 지원하지 않는 것을 발견했다. 이 지원이 부족하면 많은 사용자 정의 설정 기능을 사용할 수 없다.
그러므로 이 코드를 개발하여 Solr4분사 기능을 호환한다
코드 테스트 사용 가능
 
첨부 파일에 IK2012 코드에 대한 2차 컴파일jar 패키지를 첨부합니다
 
IKTokenizerFactory
 
package org.wltea.analyzer.henry;

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

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

/**
 *     Solr    
 * 
 * @author niko
 * @date 2012-12-25
 * @version
 */
public class IKTokenizerFactory extends TokenizerFactory implements ResourceLoaderAware {
	
	private boolean useSmart;
	
	@Override
	public void init(Map<String, String> args) {
		super.init(args);
		assureMatchVersion();
	}
		
	@Override
	public Tokenizer create(Reader input) {
		IKTokenizer ikTokenizer = new IKTokenizer(input, useSmart);
		return ikTokenizer;
	}

	@Override
	public void inform(ResourceLoader loader) throws IOException {
		useSmart = getBoolean("useSmart", true);
		
	}

}

 schema.xml 호출 방법:
 <fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="org.wltea.analyzer.henry.IKTokenizerFactory" useSmart="true"/>
        <!--
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        -->
        <!-- in this example, we will only use synonyms at query time
        <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
        -->
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="org.wltea.analyzer.henry.IKTokenizerFactory" useSmart="false"/>
        <!--
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        -->
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

좋은 웹페이지 즐겨찾기