elasticsearch - not - query dsl kibana
Analizadores en elasticsearch (3)
Tengo problemas para entender el concepto de analizadores en elasticsearch con tire gem. En realidad soy un novato en estos conceptos de búsqueda. ¿Puede alguien aquí ayudarme con algún artículo de referencia o explicar qué hacen los analizadores y por qué se usan?
Veo diferentes analizadores que se mencionan en elasticsearch como keyword, standard, simple, snowball. Sin el conocimiento de los analizadores, no pude entender lo que realmente se ajusta a mis necesidades.
Aquí hay un plugin genial en github repo . Es una extensión de Analyze API . Lo encontré en la list oficial de complementos elásticos.
Lo bueno es que muestra tokens con todos sus atributos después de cada paso. Con esto, es fácil depurar la configuración del analizador y ver por qué obtuvimos dichos símbolos y dónde perdimos los que queríamos.
Ojalá lo hubiera encontrado antes que hoy. Gracias a eso, descubrí por qué mi tokenizador de token de keyword_repeat
parecía no funcionar correctamente. El problema fue causado por el siguiente filtro de token: icu_transform
(utilizado para la transliteración) que desafortunadamente no respetó el atributo de palabra clave y transformó todos los tokens. No sé cómo más podría encontrar la causa si no fuera por este complemento.
Déjame darte una breve respuesta.
Se utiliza un analizador en el tiempo de índice y en el tiempo de búsqueda. Se usa para crear un índice de términos.
Para indexar una frase, podría ser útil dividirla en palabras. Aquí viene el analizador.
Aplica tokenizadores y filtros token. Un tokenizer podría ser un tokenizador de espacios en blanco. Se divide una frase en fichas en cada espacio. Un tokenizer en minúsculas dividirá una frase en cada letra que no sea una letra y minúsculas en todas las letras.
Un filtro simbólico se usa para filtrar o convertir algunos tokens. Por ejemplo, un filtro plegable ASCII convertirá caracteres como ê, é, è a e.
Un analizador es una mezcla de todo eso.
Deberías leer la guía de análisis y mirar a la derecha todas las opciones diferentes que tienes.
Por defecto, Elasticsearch aplica el analizador estándar. Eliminará todas las palabras comunes en inglés (y muchos otros filtros)
También puede usar Analyze Api para entender cómo funciona. Muy útil.
En Lucene , anayzer es una combinación de tokenizador (divisor) + filtro stemmer + stopword
En ElasticSearch , el analizador es una combinación de
- Filtro de caracteres : "ordenar" una cadena antes de que se tokenize. Ejemplo: eliminar etiquetas html
- Tokenizer : DEBE tener un solo tokenizer. Se usa para dividir la cadena en términos o tokens individuales
- Filtro de token : cambiar, agregar o eliminar tokens. Stemmer es un filtro simbólico, se usa para obtener la base de palabras, por ejemplo: "feliz", "felicidad" => "happi" ( demostración de Snowball )
Yo uso este analizador en mi caso:
{
"settings":{
"index" : {
"analysis" : {
"analyzer" : {
"analyzerWithSnowball" : {
"tokenizer" : "standard",
"filter" : ["standard", "lowercase", "englishSnowball"]
}
},
"filter" : {
"englishSnowball" : {
"type" : "snowball",
"language" : "english"
}
}
}
}
}
}
Árbitro: