Elasticsearch - Analisi

Quando una query viene elaborata durante un'operazione di ricerca, il contenuto di qualsiasi indice viene analizzato dal modulo di analisi. Questo modulo è costituito da analizzatore, tokenizer, tokenfilters e charfilters. Se non è definito alcun analizzatore, per impostazione predefinita gli analizzatori, i token, i filtri e i tokenizzatori integrati vengono registrati con il modulo di analisi.

Nell'esempio seguente, utilizziamo un analizzatore standard che viene utilizzato quando non viene specificato nessun altro analizzatore. Analizzerà la frase in base alla grammatica e produrrà le parole usate nella frase.

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

Eseguendo il codice sopra, otteniamo la risposta come mostrato di seguito:

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

Configurazione dell'analizzatore standard

Possiamo configurare l'analizzatore standard con vari parametri per ottenere i nostri requisiti personalizzati.

Nell'esempio seguente, configuriamo l'analizzatore standard per avere un max_token_length di 5.

Per questo, creiamo prima un indice con l'analizzatore che ha il parametro max_length_token.

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

Successivamente applichiamo l'analizzatore con un testo come mostrato di seguito. Si prega di notare come il token non viene visualizzato in quanto ha due spazi all'inizio e due spazi alla fine. Per la parola "è", c'è uno spazio all'inizio e uno alla fine. Prendendoli tutti, diventano 4 lettere con spazi e questo non lo rende una parola. Ci dovrebbe essere un carattere non spazio almeno all'inizio o alla fine, per renderlo una parola da contare.

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

Eseguendo il codice sopra, otteniamo la risposta come mostrato di seguito:

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

L'elenco dei vari analizzatori e la loro descrizione sono riportati nella tabella riportata di seguito:

S.No Analizzatore e descrizione
1

Standard analyzer (standard)

È possibile impostare stopwords e max_token_length per questo analizzatore. Per impostazione predefinita, l'elenco di parole non significative è vuoto e max_token_length è 255.

2

Simple analyzer (simple)

Questo analizzatore è composto da tokenizer minuscolo.

3

Whitespace analyzer (whitespace)

Questo analizzatore è composto da un tokenizzatore di spazi.

4

Stop analyzer (stop)

stopwords e stopwords_path possono essere configurati. Per impostazione predefinita, le parole non significative inizializzate con parole non significative in inglese e stopwords_path contiene il percorso di un file di testo con parole non significative.

Tokenizer

I token vengono utilizzati per generare token da un testo in Elasticsearch. Il testo può essere suddiviso in token tenendo conto degli spazi o di altri segni di punteggiatura. Elasticsearch ha molti tokenizzatori incorporati, che possono essere utilizzati nell'analizzatore personalizzato.

Di seguito è mostrato un esempio di tokenizer che suddivide il testo in termini ogni volta che incontra un carattere che non è una lettera, ma che contiene anche tutti i termini minuscoli:

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

Eseguendo il codice sopra, otteniamo la risposta come mostrato di seguito:

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

Un elenco di Tokenizer e le loro descrizioni sono mostrati qui nella tabella riportata di seguito -

S.No Tokenizer e descrizione
1

Standard tokenizer (standard)

Questo è costruito su un tokenizer basato sulla grammatica e max_token_length può essere configurato per questo tokenizer.

2

Edge NGram tokenizer (edgeNGram)

Impostazioni come min_gram, max_gram, token_chars possono essere impostate per questo tokenizer.

3

Keyword tokenizer (keyword)

Questo genera l'intero input come output e buffer_size può essere impostato per questo.

4

Letter tokenizer (letter)

Questo cattura l'intera parola fino a quando non si incontra una non lettera.