2014-02-21 4 views
0

Lucene 4.0에서 PorterStemFilter 클래스를 사용하는 방법에 대한 도움을 찾고 있습니다. 다음은 내 인덱서 http://www.lucenetutorial.com/lucene-in-5-minutes.html에서 가져온 것입니다 :Lucene의 PorterStemmer

...

StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_40); 
    Directory index = new RAMDirectory(); 
    IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_40, analyzer); 

    IndexWriter w = new IndexWriter(index, config); 
    addDoc(w, "Lucene in Action", "193398817"); 
    addDoc(w, "Lucene for Dummies", "55320055Z"); 

을 ......

누군가가 PorterStemFilter 클래스를

답변

1

필터를 사용하는 위치 및 방법을 좀 도와 수 일반적으로 Analyzer에 통합됩니다. 나만의 분석기를 만들려면 실제로 다시 정의해야하는 것은 TokenStream 메서드입니다.

줄기 필터를 StandardAnalyzer에 집어 넣으려면 StandardAnalyzer에서 tokenStream 구현을 복사하고 적절한 위치에 줄을 추가하십시오 (줄무늬가있는 경우 대개 필터 체인의 끝에 늦게 추가해야 함) .

@Override 
public TokenStream tokenStream(String fieldName, Reader reader) { 
    StandardTokenizer tokenStream = new StandardTokenizer(Version.LUCENE_46, reader); 
    tokenStream.setMaxTokenLength(255); 
    TokenStream result = new StandardFilter(tokenStream); 
    result = new LowerCaseFilter(result); 
    result = new StopFilter(true, result, StopAnalyzer.ENGLISH_STOP_WORDS_SET); 
    //Adding the StemFilter here 
    result = new PorterStemFilter(result); 
    return result; 
} 

또는, 당신은 이미 형태소 분석기를 가지고있는 EnglishAnalyzer (other languages 중) 사용할 수 있습니다.

+0

이미 필터를 처리하는 경우 자체 분석기를 만들 필요가 없습니다. 그러나 '왜' '국가'와 같은 검색어에 대한 조회가 발생하지 않는지 궁금합니다. 'countires'쿼리에 대한 조회수를 얻을 수 있습니다. – user2161903

+0

잘 모르겠습니다 ... "국가"가있는 문서를 가지고 "국가"에 대한 쿼리를 찾고 싶습니까? 예, 스 트리머를 사용하는 것이 적절한시기입니다. – femtoRgon

+0

네, 그게 제가 원했던 것입니다. 저는 Analyzer와 Lucene 버전 4.6으로 StandardAnalyzer를 사용하고 있습니다. 스 트리머가 분석기에 통합되어있는 경우 쿼리가 '국가'일 때 문서를 검색하지 못하는 이유는 무엇입니까? – user2161903