Elasticsearch - Análisis

Cuando se procesa una consulta durante una operación de búsqueda, el módulo de análisis analiza el contenido de cualquier índice. Este módulo consta de analizador, tokenizador, filtros de token y filtros de caracteres. Si no se define ningún analizador, entonces, de forma predeterminada, los analizadores, token, filtros y tokenizadores integrados se registran con el módulo de análisis.

En el siguiente ejemplo, usamos un analizador estándar que se usa cuando no se especifica ningún otro analizador. Analizará la oración basándose en la gramática y producirá palabras utilizadas en la oración.

POST _analyze
{
   "analyzer": "standard",
   "text": "Today's weather is beautiful"
}

Al ejecutar el código anterior, obtenemos la respuesta como se muestra a continuación:

{
   "tokens" : [
      {
         "token" : "today's",
         "start_offset" : 0,
         "end_offset" : 7,
         "type" : "",
         "position" : 0
      },
      {
         "token" : "weather",
         "start_offset" : 8,
         "end_offset" : 15,
         "type" : "",
         "position" : 1
      },
      {
         "token" : "is",
         "start_offset" : 16,
         "end_offset" : 18,
         "type" : "",
         "position" : 2
      },
      {
         "token" : "beautiful",
         "start_offset" : 19,
         "end_offset" : 28,
         "type" : "",
         "position" : 3
      }
   ]
}

Configuración del analizador estándar

Podemos configurar el analizador estándar con varios parámetros para obtener nuestros requisitos personalizados.

En el siguiente ejemplo, configuramos el analizador estándar para que tenga un max_token_length de 5.

Para esto, primero creamos un índice con el analizador que tiene el parámetro max_length_token.

PUT index_4_analysis
{
   "settings": {
      "analysis": {
         "analyzer": {
            "my_english_analyzer": {
               "type": "standard",
               "max_token_length": 5,
               "stopwords": "_english_"
            }
         }
      }
   }
}

A continuación, aplicamos el analizador con un texto como se muestra a continuación. Tenga en cuenta que el token no aparece, ya que tiene dos espacios al principio y dos espacios al final. Para la palabra "es", hay un espacio al principio y un espacio al final. Tomando todos ellos, se convierte en 4 letras con espacios y eso no lo convierte en una palabra. Debe haber un carácter sin espacio al menos al principio o al final, para que sea una palabra a contar.

POST index_4_analysis/_analyze
{
   "analyzer": "my_english_analyzer",
   "text": "Today's weather is beautiful"
}

Al ejecutar el código anterior, obtenemos la respuesta como se muestra a continuación:

{
   "tokens" : [
      {
         "token" : "today",
         "start_offset" : 0,
         "end_offset" : 5,
         "type" : "",
         "position" : 0
      },
      {
         "token" : "s",
         "start_offset" : 6,
         "end_offset" : 7,
         "type" : "",
         "position" : 1
      },
      {
         "token" : "weath",
         "start_offset" : 8,
         "end_offset" : 13,
         "type" : "",
         "position" : 2
      },
      {
         "token" : "er",
         "start_offset" : 13,
         "end_offset" : 15,
         "type" : "",
         "position" : 3
      },
      {
         "token" : "beaut",
         "start_offset" : 19,
         "end_offset" : 24,
         "type" : "",
         "position" : 5
      },
      {
         "token" : "iful",
         "start_offset" : 24,
         "end_offset" : 28,
         "type" : "",
         "position" : 6
      }
   ]
}

La lista de varios analizadores y su descripción se dan en la tabla que se muestra a continuación:

S. No Analizador y descripción
1

Standard analyzer (standard)

Se pueden configurar palabras irrelevantes y max_token_length para este analizador. De forma predeterminada, la lista de palabras vacías está vacía y max_token_length es 255.

2

Simple analyzer (simple)

Este analizador está compuesto por un tokenizador en minúsculas.

3

Whitespace analyzer (whitespace)

Este analizador está compuesto por un tokenizador de espacios en blanco.

4

Stop analyzer (stop)

Se pueden configurar palabras irrelevantes y palabras irrelevantes_ruta. De forma predeterminada, las palabras vacías se inicializan en palabras vacías en inglés y stopwords_path contiene la ruta a un archivo de texto con palabras vacías.

Tokenizadores

Los tokens se utilizan para generar tokens a partir de un texto en Elasticsearch. El texto se puede dividir en tokens teniendo en cuenta los espacios en blanco u otros signos de puntuación. Elasticsearch tiene muchos tokenizadores integrados, que se pueden usar en un analizador personalizado.

A continuación se muestra un ejemplo de tokenizador que divide el texto en términos cada vez que encuentra un carácter que no es una letra, pero que también pone todos los términos en minúsculas:

POST _analyze
{
   "tokenizer": "lowercase",
   "text": "It Was a Beautiful Weather 5 Days ago."
}

Al ejecutar el código anterior, obtenemos la respuesta como se muestra a continuación:

{
   "tokens" : [
      {
         "token" : "it",
         "start_offset" : 0,
         "end_offset" : 2,
         "type" : "word",
         "position" : 0
      },
      {
         "token" : "was",
         "start_offset" : 3,
         "end_offset" : 6,
         "type" : "word",
         "position" : 1
      },
      {
         "token" : "a",
         "start_offset" : 7,
         "end_offset" : 8,
         "type" : "word",
         "position" : 2
      },
      {
         "token" : "beautiful",
         "start_offset" : 9,
         "end_offset" : 18,
         "type" : "word",
         "position" : 3
      },
      {
         "token" : "weather",
         "start_offset" : 19,
         "end_offset" : 26,
         "type" : "word",
         "position" : 4
      },
      {
         "token" : "days",
         "start_offset" : 29,
         "end_offset" : 33,
         "type" : "word",
         "position" : 5
      },
      {
         "token" : "ago",
         "start_offset" : 34,
         "end_offset" : 37,
         "type" : "word",
         "position" : 6
      }
   ]
}

Aquí se muestra una lista de Tokenizadores y sus descripciones en la tabla que se muestra a continuación:

S. No Tokenizer y descripción
1

Standard tokenizer (standard)

Esto se basa en un tokenizador basado en gramática y max_token_length se puede configurar para este tokenizador.

2

Edge NGram tokenizer (edgeNGram)

Se pueden establecer configuraciones como min_gram, max_gram, token_chars para este tokenizador.

3

Keyword tokenizer (keyword)

Esto genera la entrada completa como salida y buffer_size se puede configurar para esto.

4

Letter tokenizer (letter)

Esto captura la palabra completa hasta que se encuentra una que no es una letra.