Elasticsearch - Análise

Quando uma consulta é processada durante uma operação de pesquisa, o conteúdo de qualquer índice é analisado pelo módulo de análise. Este módulo consiste em analisador, tokenizer, tokenfilters e charfilters. Se nenhum analisador for definido, então, por padrão, os analisadores, token, filtros e tokenizers integrados são registrados com o módulo de análise.

No exemplo a seguir, usamos um analisador padrão que é usado quando nenhum outro analisador é especificado. Ele irá analisar a frase com base na gramática e produzir palavras usadas na frase.

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

Ao executar o código acima, obtemos a resposta conforme mostrado abaixo -

{
   "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
      }
   ]
}

Configurando o analisador padrão

Podemos configurar o analisador padrão com vários parâmetros para obter nossos requisitos personalizados.

No exemplo a seguir, configuramos o analisador padrão para ter um max_token_length de 5.

Para isso, primeiro criamos um índice com o analisador tendo o parâmetro max_length_token.

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

Em seguida, aplicamos o analisador com um texto conforme mostrado abaixo. Observe como o token não aparece, pois tem dois espaços no início e dois espaços no final. Para a palavra “é”, há um espaço no início e um espaço no final. Tomando todas elas, torna-se 4 letras com espaços e isso não significa uma palavra. Deve haver um caractere sem espaço pelo menos no início ou no final, para torná-lo uma palavra a ser contada.

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

Ao executar o código acima, obtemos a resposta conforme mostrado abaixo -

{
   "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
      }
   ]
}

A lista de vários analisadores e suas descrições são fornecidas na tabela mostrada abaixo -

S.Não Analisador e descrição
1

Standard analyzer (standard)

stopwords e configuração max_token_length podem ser definidas para este analisador. Por padrão, a lista de palavras de interrupção está vazia e max_token_length é 255.

2

Simple analyzer (simple)

Este analisador é composto de um tokenizador em minúsculas.

3

Whitespace analyzer (whitespace)

Este analisador é composto de tokenizer de espaço em branco.

4

Stop analyzer (stop)

stopwords e stopwords_path podem ser configurados. Por padrão, palavras irrelevantes inicializadas com palavras irrelevantes em inglês e stopwords_path contém o caminho para um arquivo de texto com palavras irrelevantes.

Tokenizers

Tokenizers são usados ​​para gerar tokens de um texto no Elasticsearch. O texto pode ser dividido em tokens levando em consideração o espaço em branco ou outras pontuações. Elasticsearch tem muitos tokenizers integrados, que podem ser usados ​​em analisadores personalizados.

Um exemplo de tokenizer que divide o texto em termos sempre que encontra um caractere que não é uma letra, mas também em minúsculas todos os termos, é mostrado abaixo -

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

Ao executar o código acima, obtemos a resposta conforme mostrado abaixo -

{
   "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
      }
   ]
}

Uma lista de Tokenizers e suas descrições são mostradas aqui na tabela abaixo -

S.Não Tokenizer e descrição
1

Standard tokenizer (standard)

Isso é construído em um tokenizer baseado em gramática e max_token_length pode ser configurado para este tokenizer.

2

Edge NGram tokenizer (edgeNGram)

Configurações como min_gram, max_gram, token_chars podem ser definidas para este tokenizer.

3

Keyword tokenizer (keyword)

Isso gera toda a entrada como uma saída e buffer_size pode ser definido para isso.

4

Letter tokenizer (letter)

Isso captura a palavra inteira até que uma não letra seja encontrada.