Elasticsearch - Recherche et analyse de texte

Mapping et analyzers

DéfinitionAnalyzer

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.

ExempleDes 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

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

1
"analyzed_string": {
2
  "type": "string",
3
  "index": "analyzed",
4
  "analyzer": "whitespace_analyzer"
5
}

Remarque

Pour configurer un analyzer par défaut

1
{
2
  "settings": {
3
    "analysis": {
4
      "analyzer": {
5
        "my_english_analyzer": {
6
          "type": "standard",
7
          "stopwords": "_english_"
8
        }
9
      }
10
    }
11
  }
12
}

ComplémentAnalyzer custom

Exemple d'un analyzer custom

1
"settings": {
2
  "analysis": {
3
    "filter": {
4
      "char_lengh" : {
5
        "type": "length",
6
        "min": 3
7
      }
8
    }
9
  },
10
  "analyzer": {
11
    "super_analyzer": {
12
      "tokenizer": "classic",
13
      "filter": [
14
        "lowercase",
15
        "asciifolding",
16
        "char_length"
17
      ]
18
    }
19
  }
20
}

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

PrécédentPrécédentSuivantSuivant
AccueilAccueilImprimerImprimer Oscar Odic, 2016 (Contributions : Stéphane Crozat, les étudiants de l'UTC) Paternité - Partage des Conditions Initiales à l'IdentiqueRéalisé avec Scenari (nouvelle fenêtre)