developer tip

Lucene 분석기 비교

optionbox 2020. 8. 13. 08:15
반응형

Lucene 분석기 비교


누군가 Lucene 내의 다른 분석기의 차이점을 설명해 주시겠습니까? maxClauseCount 예외가 발생하고 KeywordAnalyzer를 사용하여이 문제를 피할 수 있다는 것을 알고 있지만 분석기 주변의 문제를 이해하지 않고 StandardAnalyzer에서 변경하고 싶지 않습니다. 매우 감사합니다.


일반적으로 Lucene의 모든 분석기는 토크 나이저 + 형태소 분석기 + 불용어 필터입니다.

Tokenizer 는 텍스트를 청크로 분할하며, 다른 분석기는 서로 다른 토크 나이저를 사용할 수 있으므로 서로 다른 출력 토큰 스트림 , 즉 텍스트 청크 시퀀스를 얻을 수 있습니다 . 예를 들어, 텍스트를 전혀 분할하지 않고 모든 필드를 단일 토큰으로 사용 KeywordAnalyzer한다고 언급했습니다 . 동시에 (및 대부분의 다른 분석기)는 공백과 구두점을 분할 점으로 사용합니다. 예를 들어 "I am very happy"라는 문구의 경우 [ "i", "am", "very", "happy"] (또는 이와 유사한 것) 목록이 생성됩니다. 특정 분석기 / 토케 나이저에 대한 자세한 내용은 Java Docs를 참조하십시오 .StandardAnalyzer

형태소 분석기 는 문제의 단어의 기초를 파악 하는 데 사용됩니다. 사용되는 언어에 따라 크게 다릅니다. 예를 들어, 영어로 된 이전 구문의 경우 [ "i", "be", "veri", "happi"]와 같은 것이 생성되고 프랑스어의 경우 "Je suis très heureux"는 일종의 프랑스어 분석기 (예 SnowballAnalyzer: 초기화 됨 with "French")는 [ "je", "être", "tre", "heur"]를 생성합니다. 물론, 한 언어의 분석기를 사용하여 다른 언어로 텍스트를 스템하는 경우 다른 언어의 규칙이 사용되어 형태소 분석기가 잘못된 결과를 생성 할 수 있습니다. 모든 시스템에서 실패하지는 않지만 검색 결과가 정확하지 않을 수 있습니다.

KeywordAnalyzer형태소 분석기를 사용하지 않으며 수정되지 않은 모든 필드를 전달합니다. 따라서 영어 텍스트에서 일부 단어를 검색하려는 경우이 분석기를 사용하는 것은 좋지 않습니다.

불용어 는 가장 빈번하고 거의 쓸모없는 단어입니다. 다시 말하지만, 언어에 크게 의존합니다. 영어의 경우 이러한 단어는 "a", "the", "I", "be", "have"등입니다. 불용어 필터는 검색 결과의 노이즈를 줄이기 위해 토큰 스트림에서 해당 단어를 제거하므로 마지막으로 "I 'm very happy' StandardAnalyzer는 [ "veri", "happi"] 목록으로 변환됩니다.

그리고 KeywordAnalyzer다시 아무것도하지 않습니다. 따라서 KeywordAnalyzerID 또는 전화 번호와 같은 항목에 사용되지만 일반적인 텍스트에는 사용되지 않습니다.

그리고 당신의 maxClauseCount예외에 관해서는, 나는 당신이 검색에서 그것을 얻는다고 믿습니다. 이 경우 검색 쿼리가 너무 복잡하기 때문일 수 있습니다. 여러 쿼리로 분할하거나 더 낮은 수준의 함수를 사용하십시오.


내 관점에서 나는 StandAnalyzerSmartCNAnalyzer. 중국어로 텍스트를 검색해야하므로. 분명히 SmartCnAnalyzer중국어를 다루는 것이 더 낫습니다. 침엽수 목적으로 가장 적합한 분석기를 선택해야합니다.

참고 URL : https://stackoverflow.com/questions/5483903/comparison-of-lucene-analyzers

반응형