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ą. |