2012-04-07 4 views
2

길이에 따라 특정 용어를 제외하려면 어떻게합니까? 예를 들어 3 자 미만 또는 20 자 이상의 용어는 색인하지 마십시오. 또한 숫자로 시작하는 단어도 제외하십시오.Lucene 색인 : 특정 용어 제외

감사합니다.

답변

3

StandardAnalyzer은 사용자가 설정할 수있는 속성이 있고 내가 이미 숫자로 시작하는 토큰을 제거한다고 생각합니다. 그러나보다 구체적인 요구가있는 경우 AnalyzerTokenFilter을 직접 작성해야합니다. Lucene의 문서와는 달리, 토큰 화 프로 시저의 최상위 성능 요구 사항으로 인한 비정상적인 코딩 패턴으로 인해 이러한 클래스를 구현하는 것이 "간단"하지 않습니다. 예를 들어 StandardAnalyzer의 동작을 확장하여 약간 수정하는 방법은 없으므로 기본 클래스 중 하나에서 시작해야합니다. StandardAnalyzer,과 동일한 클래스를 확장하는 경우 재사용 가능 분석기를 만들면 계약서를 준수해야합니다.

따라서 먼저 기존 필터의 분석기를 함께 사용하십시오. 예를 들어, Lucene 코어에 LengthFilter이 제공됩니다. 그 실패, 자신의 필터를 구현하고 분석기에 그것을 빌드하십시오.

public class MyFilter extends FilteringTokenFilter 
{ 
    private final CharTermAttribute termAtt = addAttribute(CharTermAttribute.class); 

    public MyFilter(TokenStream in) { super(false, in); } 

    protected boolean accept() { 
    final int len = termAtt.length(); 
    final int d = termAtt.charAt(0) - '0': 
    return len >= 3 && len <= 20 && (d < 0 || d > 9); 
    } 
} 

public final class MyAnalyzer extends ReusableAnalyzerBase 
{ 
    @Override protected TokenStreamComponents createComponents(
     String fieldName, Reader reader) 
    { 
    final Tokenizer source = new LowerCaseTokenizer(Version.LUCENE_35, reader); 
    return new TokenStreamComponents(source, new MyFilter(source)); 
    } 
} 
:이 필터와 분석기를 모두 구현 시작으로 당신을 도움이 될