Mapping et analyzers
Définition : Analyzer
Un analyzer, défini sur un attribut dans le mapping, permet d'analyser un texte et de le découper pour une recherche textuelle approfondie
Il est constitué de :
0 à plusieurs char filters : Permettant de pré-traiter une chaîne de caractère avant son découpage.
1 tokenizer : Permettant de découper la donnée.
0 à plusieurs token filters : Permettant de filtrer ou transformer les données découpées.
Exemple : Des exemples de tokenizers
standard : Découpe un texte par la plupart des délimiteurs possibles, intéressant pour la plupart des langues européenne
letter : Découpe en texte par tous caractères qui n'est pas une lettre
thai : Utilise la segmentation thaïlandaise.
https://www.elastic.co/guide/en/elasticsearch/reference/2.4/analysis-tokenizers.html
Exemple : Des exemples de char/token filters
lowercase : Normalise un texte en lower case
length : Filtre les mots en fonction de leurs tailles
stemmer : Transforme tous les mots d'un texte d'une langue en racines de mots
https://www.elastic.co/guide/en/elasticsearch/reference/2.4/analysis-tokenfilters.html
Analyzers "built-in"
Pour les cas les plus courants, elasticsearch possède par défaut plusieurs analyzers :
standard : Découpe le textes avec la plupart des délimiteurs possibles (espace, tirets, apostrophe...), supprime les ponctuations, et peut (désactivé par defaut) filtrer les stop words (mots communs tel que le, la, les ...)
simple : Découpe par tous les caractères non littérales, et les passe en minuscule.
whitespace : Comme le précédent, mais découpe par espace.
Remarque :
Pour définir un analyzer, on ajoute un champs analyzer pour l'attribut en question (le champs index doit être analyzed, il l'est par défaut pour le type string) dans la définition du mapping.
"analyzed_string": {
"type": "string",
"index": "analyzed",
"analyzer": "whitespace_analyzer"
}
Remarque :
Pour configurer un analyzer par défaut
{
"settings": {
"analysis": {
"analyzer": {
"my_english_analyzer": {
"type": "standard",
"stopwords": "_english_"
}
}
}
}
}
Complément : Analyzer custom
Exemple d'un analyzer custom
"settings": {
"analysis": {
"filter": {
"char_lengh" : {
"type": "length",
"min": 3
}
}
},
"analyzer": {
"super_analyzer": {
"tokenizer": "classic",
"filter": [
"lowercase",
"asciifolding",
"char_length"
]
}
}
}
Vous trouverez dans la doc officiel :
La liste des tokenizers : https://www.elastic.co/guide/en/elasticsearch/reference/2.4/analysis-tokenizers.html
La liste des token filters : https://www.elastic.co/guide/en/elasticsearch/reference/2.4/analysis-tokenfilters.html