Elasticsearch - Analiza

Gdy zapytanie jest przetwarzane podczas operacji wyszukiwania, zawartość dowolnego indeksu jest analizowana przez moduł analizy. Ten moduł składa się z analizatora, tokenizatora, filtrów tokenów i filtrów znaków. Jeśli żaden analizator nie jest zdefiniowany, domyślnie wbudowane analizatory, token, filtry i tokenizatory są rejestrowane w module analizy.

W poniższym przykładzie używamy standardowego analizatora, który jest używany, gdy nie określono innego analizatora. Przeanalizuje zdanie na podstawie gramatyki i wyświetli słowa użyte w zdaniu.

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

Po uruchomieniu powyższego kodu otrzymujemy odpowiedź, jak pokazano poniżej -

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

Konfigurowanie analizatora standardowego

Możemy skonfigurować standardowy analizator z różnymi parametrami, aby uzyskać nasze niestandardowe wymagania.

W poniższym przykładzie konfigurujemy standardowy analizator tak, aby miał max_token_length równą 5.

W tym celu najpierw tworzymy indeks z analizatorem mającym parametr max_length_token.

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

Następnie stosujemy analizator z tekstem, jak pokazano poniżej. Zwróć uwagę, że żeton nie jest widoczny, ponieważ ma dwa spacje na początku i dwa na końcu. W przypadku słowa „jest” jest spacja na początku i spacja na końcu. Biorąc je wszystkie, uzyskuje się 4 litery ze spacjami, a to nie czyni z tego słowa. Przynajmniej na początku lub na końcu powinien znajdować się znak inny niż spacja, aby było to słowo do liczenia.

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

Po uruchomieniu powyższego kodu otrzymujemy odpowiedź, jak pokazano poniżej -

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

Listę różnych analizatorów i ich opis zawiera poniższa tabela -

S.Nr Analizator i opis
1

Standard analyzer (standard)

Dla tego analizatora można ustawić stopwords i max_token_length. Domyślnie lista stopwords jest pusta, a max_token_length to 255.

2

Simple analyzer (simple)

Ten analizator składa się z tokenizera małych liter.

3

Whitespace analyzer (whitespace)

Ten analizator składa się z tokenizatora białych znaków.

4

Stop analyzer (stop)

można skonfigurować stopwords i stopwords_path. Domyślnie odrzucane słowa są inicjowane jako angielskie słowa ignorowane, a stopwords_path zawiera ścieżkę do pliku tekstowego ze słowami pomijanymi.

Tokenizatory

Tokenizatory służą do generowania tokenów z tekstu w Elasticsearch. Tekst można podzielić na tokeny, biorąc pod uwagę spacje lub inne znaki interpunkcyjne. Elasticsearch ma wiele wbudowanych tokenizatorów, których można używać w analizatorze niestandardowym.

Przykład tokenizera, który rozbija tekst na terminy za każdym razem, gdy napotka znak, który nie jest literą, ale także zamienia wszystkie terminy na małe litery, pokazano poniżej -

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

Po uruchomieniu powyższego kodu otrzymujemy odpowiedź, jak pokazano poniżej -

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

Lista tokenizatorów i ich opisy znajdują się w poniższej tabeli -

S.Nr Tokenizer i opis
1

Standard tokenizer (standard)

Jest to oparte na tokenizatorze gramatycznym i można skonfigurować max_token_length dla tego tokenizera.

2

Edge NGram tokenizer (edgeNGram)

Dla tego tokenizera można ustawić takie ustawienia, jak min_gram, max_gram, token_chars.

3

Keyword tokenizer (keyword)

To generuje całe wejście jako wyjście i można ustawić dla tego wartość buffer_size.

4

Letter tokenizer (letter)

To przechwytuje całe słowo, dopóki nie zostanie napotkany znak niebędący literą.