2012-10-11 32 views
29

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?Analizadores en elasticsearch

veo diferentes analizadores que se mencionan en elasticsearch como palabra clave, estándar, simple, bola de nieve. Sin el conocimiento de los analizadores, no pude entender lo que realmente se ajusta a mis necesidades.

+4

De hecho, acabo de encontrar esta publicación de blog impresionante sobre cómo funcionan los analizadores en elasticsearch, con ejemplos concretos: https://www.found.no/foundation/text-analysis-part-1/ – BrDaHa

+0

Eso realmente valió la pena mirar para un principiante para empezar con ... Gracias @BrDaHa –

Respuesta

68

Déjame darle una respuesta corta.

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, que podría ser útil para romper con 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 minúsculo dividirá una frase en cada letra que no sea una letra y minúscula todas las letras.

Un filtro token se utiliza 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.

Debe leer Analysis guide y mirar a la derecha todas las diferentes opciones que tiene.

De forma predeterminada, Elasticsearch aplica el analizador estándar. Se eliminarán todas las palabras comunes en inglés (y muchos otros filtros)

También pueden utilizar el Analyze Api para entender cómo funciona. Muy útil.

+0

Muchas gracias por la respuesta @dadoonet ... –

+3

Puede jugar con [este complemento] (https://github.com/polyfractal/elasticsearch-inquisitor) para comprender el analizadores, tokenizadores, filtros un poco mejor. – czerasz

+0

parece que no funciona para edgeNGram tokenizer y filtro –

6

En Lucene, anayzer es una combinación de tokenizer (splitter) + filtro stemmer + palabras de parada

En Elasticsearch, analizador es una combinación de

  1. filtro Carácter: "ordenado hasta "una cuerda antes de que se tokenize. Ejemplo: eliminar etiquetas html
  2. Tokenizer: DEBE tener un solo tokenizer. Se utiliza para romper la cadena en términos individuales o fichas
  3. filtro simbólico: cambiar, añadir o eliminar fichas.Stemmer es un filtro de modo, que se utiliza para obtener la base de la palabra, por ejemplo: "feliz", "felicidad" => "happi" (Snowball demo)

utilizo este analizador en mi caso:

 { 
     "settings":{ 
     "index" : { 
      "analysis" : { 
       "analyzer" : { 
        "analyzerWithSnowball" : { 
         "tokenizer" : "standard", 
         "filter" : ["standard", "lowercase", "englishSnowball"] 
        } 
       }, 
       "filter" : { 
        "englishSnowball" : { 
         "type" : "snowball", 
         "language" : "english" 
        } 
       } 
      } 
     } 
     } 
    } 

Ref:

  1. Comparison of Lucene Analyzers
  2. http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/custom-analyzers.html
0

Aquí hay un plugin impresionante en github repo. Es una extensión de Analyze API. Lo encontró en el complemento oficial elástico list.

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.

Desearía haberlo encontrado antes que hoy. Gracias a eso descubrí por qué mi Token tokenizer 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.