답변:
일반적으로 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
다시 아무것도하지 않습니다. 따라서 KeywordAnalyzer
ID 또는 전화 번호와 같은 항목에 사용되지만 일반적인 텍스트에는 사용되지 않습니다.
그리고 당신의 maxClauseCount
예외에 관해서는, 나는 당신이 검색에서 그것을 얻는다고 믿습니다. 이 경우 검색 쿼리가 너무 복잡하기 때문일 수 있습니다. 여러 쿼리로 분할하거나 더 낮은 수준의 기능을 사용하십시오.