길이에 따라 특정 용어를 제외하려면 어떻게합니까? 예를 들어 3 자 미만 또는 20 자 이상의 용어는 색인하지 마십시오. 또한 숫자로 시작하는 단어도 제외하십시오.Lucene 색인 : 특정 용어 제외
감사합니다.
길이에 따라 특정 용어를 제외하려면 어떻게합니까? 예를 들어 3 자 미만 또는 20 자 이상의 용어는 색인하지 마십시오. 또한 숫자로 시작하는 단어도 제외하십시오.Lucene 색인 : 특정 용어 제외
감사합니다.
이 모든 작업을 수행 할 수있는 사용자 지정 토큰 필터를 작성할 수 있습니다. 자세한 내용은 http://lucene.apache.org/core/old_versioned_docs/versions/3_5_0/api/all/org/apache/lucene/analysis/package-summary.html을 참조하십시오.
StandardAnalyzer
은 사용자가 설정할 수있는 속성이 있고 내가 이미 숫자로 시작하는 토큰을 제거한다고 생각합니다. 그러나보다 구체적인 요구가있는 경우 Analyzer
과 TokenFilter
을 직접 작성해야합니다. 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));
}
}
:이 필터와 분석기를 모두 구현 시작으로 당신을 도움이 될