lucene analyzer

Comparación de Analizadores Lucene



analyzer (1)

En general, cualquier analizador en Lucene es el filtro tokenizer + stemmer + stop-words.

Tokenizer divide el texto en fragmentos, y dado que diferentes analizadores pueden usar diferentes tokenizers, puede obtener diferentes flujos de token de salida, es decir, secuencias de fragmentos de texto. Por ejemplo, KeywordAnalyzer que mencionaste 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 demás analizadores) usan espacios y signos de puntuación como puntos de división. Por ejemplo, para la frase "Estoy muy feliz", producirá la lista ["i", "soy", "muy", "feliz"] (o algo por el estilo). Para obtener más información sobre analizadores / tokenizadores específicos, consulte sus Java Docs .

Los Stemmers se utilizan para obtener la base de una palabra en cuestión. Depende mucho del lenguaje 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 va a usar el analizador de un idioma para contener el texto en otro, se usarán las reglas del otro idioma y el talud puede producir resultados incorrectos. No es un fracaso de todo el sistema, pero los resultados de búsqueda pueden ser menos precisos.

KeywordAnalyzer no usa ningún stemmers, pasa todo el campo sin modificar. Por lo tanto, si va a buscar algunas palabras en texto en inglés, no es una buena idea usar este analizador.

Las palabras de alto son las palabras más frecuentes y casi inútiles. De nuevo, depende en gran medida del lenguaje. En inglés, estas palabras son "a", "the", "I", "be", "have", etc. Los filtros de palabras prohibidas los eliminan de la secuencia token para reducir el ruido en los resultados de búsqueda, por lo que finalmente nuestra frase "I estoy muy contento "con StandardAnalyzer se transformará en la lista [" veri "," happi "].

Y KeywordAnalyzer nuevamente no hace nada. Por lo tanto, KeywordAnalyzer se usa para cosas como ID o números de teléfono, pero no para el texto habitual.

Y en cuanto a su excepción de maxClauseCount , creo que la obtiene al buscar. En este caso, lo más probable es que se deba a una consulta de búsqueda demasiado compleja. Intenta dividirlo en varias consultas o usa más funciones de bajo nivel.

¿Puede alguien explicar la diferencia entre los diferentes analizadores dentro de Lucene? Recibo una excepción de maxClauseCount y entiendo que puedo evitar esto usando un KeywordAnalyzer pero no quiero cambiar desde el StandardAnalyzer sin entender los problemas que rodean a los analizadores. Muchas gracias.