Elasticsearch - Analyse
Lorsqu'une requête est traitée lors d'une opération de recherche, le contenu de n'importe quel index est analysé par le module d'analyse. Ce module comprend un analyseur, un tokenizer, des tokenfilters et des charfilters. Si aucun analyseur n'est défini, les analyseurs, jetons, filtres et tokenizers intégrés sont par défaut enregistrés avec le module d'analyse.
Dans l'exemple suivant, nous utilisons un analyseur standard qui est utilisé lorsqu'aucun autre analyseur n'est spécifié. Il analysera la phrase en fonction de la grammaire et produira les mots utilisés dans la phrase.
POST _analyze
{
"analyzer": "standard",
"text": "Today's weather is beautiful"
}
En exécutant le code ci-dessus, nous obtenons la réponse comme indiqué ci-dessous -
{
"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
}
]
}
Configuration de l'analyseur standard
Nous pouvons configurer l'analyseur standard avec divers paramètres pour obtenir nos exigences personnalisées.
Dans l'exemple suivant, nous configurons l'analyseur standard pour avoir un max_token_length de 5.
Pour cela, nous créons d'abord un index avec l'analyseur ayant le paramètre max_length_token.
PUT index_4_analysis
{
"settings": {
"analysis": {
"analyzer": {
"my_english_analyzer": {
"type": "standard",
"max_token_length": 5,
"stopwords": "_english_"
}
}
}
}
}
Ensuite, nous appliquons l'analyseur avec un texte comme indiqué ci-dessous. Veuillez noter que le jeton n'apparaît pas car il comporte deux espaces au début et deux espaces à la fin. Pour le mot «est», il y a un espace au début et un espace à la fin de celui-ci. En les prenant toutes, cela devient 4 lettres avec des espaces et cela n'en fait pas un mot. Il devrait y avoir un caractère non espace au moins au début ou à la fin, pour en faire un mot à compter.
POST index_4_analysis/_analyze
{
"analyzer": "my_english_analyzer",
"text": "Today's weather is beautiful"
}
En exécutant le code ci-dessus, nous obtenons la réponse comme indiqué ci-dessous -
{
"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 liste des différents analyseurs et leur description sont données dans le tableau ci-dessous -
S. Non | Analyseur et description |
---|---|
1 | Standard analyzer (standard) Les paramètres stopwords et max_token_length peuvent être définis pour cet analyseur. Par défaut, la liste des mots vides est vide et max_token_length vaut 255. |
2 | Simple analyzer (simple) Cet analyseur est composé de jetons minuscules. |
3 | Whitespace analyzer (whitespace) Cet analyseur est composé d'un tokenizer d'espace blanc. |
4 | Stop analyzer (stop) stopwords et stopwords_path peuvent être configurés. Par défaut, les mots vides initialisés aux mots vides anglais et stopwords_path contient le chemin vers un fichier texte avec des mots vides. |
Tokenizers
Les jetons sont utilisés pour générer des jetons à partir d'un texte dans Elasticsearch. Le texte peut être décomposé en jetons en tenant compte des espaces ou d'autres ponctuations. Elasticsearch dispose de nombreux jetons intégrés, qui peuvent être utilisés dans un analyseur personnalisé.
Un exemple de tokenizer qui décompose le texte en termes chaque fois qu'il rencontre un caractère qui n'est pas une lettre, mais qui minuscule également tous les termes, est illustré ci-dessous
POST _analyze
{
"tokenizer": "lowercase",
"text": "It Was a Beautiful Weather 5 Days ago."
}
En exécutant le code ci-dessus, nous obtenons la réponse comme indiqué ci-dessous -
{
"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
}
]
}
Une liste des Tokenizers et leurs descriptions sont présentées ici dans le tableau ci-dessous -
S. Non | Tokenizer et description |
---|---|
1 | Standard tokenizer (standard) Ceci est construit sur un tokenizer basé sur la grammaire et max_token_length peut être configuré pour ce tokenizer. |
2 | Edge NGram tokenizer (edgeNGram) Des paramètres tels que min_gram, max_gram, token_chars peuvent être définis pour ce tokenizer. |
3 | Keyword tokenizer (keyword) Cela génère une entrée entière en tant que sortie et buffer_size peut être défini pour cela. |
4 | Letter tokenizer (letter) Cela capture le mot entier jusqu'à ce qu'une non-lettre soit rencontrée. |