Em geral, qualquer analisador no Lucene é tokenizer + lematizador + filtro de palavras de interrupção.
O tokenizer divide seu texto em pedaços e, como diferentes analisadores podem usar diferentes tokenizadores, você pode obter diferentes fluxos de tokens de saída , ou seja, sequências de pedaços de texto. Por exemplo, KeywordAnalyzer
você mencionou que não divide o texto e considera todos os campos como um único token. Ao mesmo tempo, StandardAnalyzer
(e a maioria dos outros analisadores) usam espaços e pontuação como pontos de divisão. Por exemplo, para a frase "Estou muito feliz", ela produzirá uma lista ["eu", "sou", "muito", "feliz"] (ou algo parecido). Para obter mais informações sobre analisadores / tokenizadores específicos, consulte seus Java Docs .
Os lematizadores são usados para obter a base de uma palavra em questão. Depende muito da linguagem usada. Por exemplo, para a frase anterior em inglês haverá algo como ["i", "be", "veri", "happi"] produzido, e para o francês "Je suis très heureux" algum tipo de analisador francês (como SnowballAnalyzer
, inicializado com "francês") produzirá ["je", "être", "tre", "heur"]. Obviamente, se você usar o analisador de um idioma para derivar o texto em outro, as regras do outro idioma serão usadas e o lematizador pode produzir resultados incorretos. Não é falha de todo o sistema, mas os resultados da pesquisa podem ser menos precisos.
KeywordAnalyzer
não usa lematizadores, passa todo o campo sem modificações. Portanto, se você for pesquisar algumas palavras em um texto em inglês, não é uma boa ideia usar este analisador.
Palavras irrelevantes são as palavras mais frequentes e quase inúteis. Novamente, isso depende muito do idioma. Para o inglês, essas palavras são "a", "the", "I", "be", "have", etc. Filtros de palavras irrelevantes as removem do fluxo de tokens para reduzir o ruído nos resultados da pesquisa, então finalmente nossa frase "I estou muito feliz "com StandardAnalyzer
será transformado em lista [" veri "," happi "].
E KeywordAnalyzer
novamente não faz nada. Portanto, KeywordAnalyzer
é usado para coisas como ID ou números de telefone, mas não para texto normal.
E quanto à sua maxClauseCount
exceção, acredito que você o entende na busca. Neste caso, provavelmente é devido a uma consulta de pesquisa muito complexa. Tente dividi-lo em várias consultas ou use funções de nível mais baixo.
Na minha perspectiva, usei
StandAnalyzer
eSmartCNAnalyzer
. Como tenho que pesquisar texto em chinês. Obviamente,SmartCnAnalyzer
é melhor lidar com chineses. Para diferentes propósitos, você deve escolher o analisador mais adequado.fonte