En general, cualquier analizador en Lucene es tokenizer + lematizador + filtro de palabras vacías.
Tokenizer divide su texto en trozos, y dado que diferentes analizadores pueden usar diferentes tokenizadores, puede obtener diferentes flujos de token de salida , es decir, secuencias de trozos de texto. Por ejemplo, KeywordAnalyzer
mencionaste que no divide el texto en absoluto y toma todo el campo como un solo token. Al mismo tiempo, StandardAnalyzer
(y la mayoría de los otros analizadores) usan espacios y puntuación como puntos de división. Por ejemplo, para la frase "Estoy muy feliz" producirá una lista ["yo", "estoy", "muy", "feliz"] (o algo así). Para obtener más información sobre analizadores / tokenizadores específicos, consulte sus Documentos de Java .
Las leyendas se utilizan para obtener la base de una palabra en cuestión. Depende en gran medida del idioma utilizado. Por ejemplo, para la frase anterior en inglés habrá algo como ["i", "be", "veri", "happi"] producido, y para el francés "Je suis très heureux" algún tipo de analizador francés (como SnowballAnalyzer
, inicializado con "francés") producirá ["je", "être", "tre", "heur"]. Por supuesto, si usa el analizador de un idioma para derivar texto en otro, se usarán las reglas del otro idioma y el derivador puede producir resultados incorrectos. No es un error de todo el sistema, pero los resultados de búsqueda pueden ser menos precisos.
KeywordAnalyzer
no utiliza lematizadores, pasa todo el campo sin modificaciones. Por lo tanto, si va a buscar algunas palabras en un texto en inglés, no es una buena idea utilizar este analizador.
Las palabras vacías son las palabras más frecuentes y casi inútiles. Nuevamente, depende en gran medida del idioma. Para el inglés, estas palabras son "a", "the", "I", "be", "have", etc. Los filtros de palabras vacías las eliminan del flujo de tokens para reducir el ruido en los resultados de búsqueda, por lo que finalmente nuestra frase "I StandardAnalyzer
Estoy muy feliz "con se transformará en lista [" veri "," happi "].
Y de KeywordAnalyzer
nuevo no hace nada. Por lo tanto, KeywordAnalyzer
se usa para cosas como ID o números de teléfono, pero no para texto habitual.
Y en cuanto a tu maxClauseCount
excepción, creo que lo consigues buscando. En este caso, lo más probable es que se deba a una consulta de búsqueda demasiado compleja. Intente dividirlo en varias consultas o use más funciones de bajo nivel.