Suggest API


(Florian Grousset) #1

Bonjour,

Je souhaites utiliser la nouvelle fonctionnalité "suggest" afin de faire une liste de suggestion dans un champ.

Voici comment j'ai défini le mapping sur mon champ :

"suggest":{
  "type": "completion",
  "analyzer": "suggest_analyzer",
  "max_input_length": 50,
  "preserve_separators": true,
  "payloads": true,
  "preserve_position_increments": true
}

L'analyzer que j'utilise est défini de la sorte :

"suggest_analyzer": {
  "tokenizer":"standard",
  "filter":[
    "standard",
    "lowercase",
    "accent_folding"
  ]
}

Le filtre utilisé pour cet analyzer est le suivant :

"accent_folding":{
  "type":"icu_folding",
  "replace":"false"
}

Les données de ce champ sont en Français et comportent donc des accents ou pas.
Ex : démolition, dentiste, dépannage

L'indexation des documents contient le suggest de la sorte :

"suggest" : {
  "input" : ["démolition"],
  "output" : "démolition"
  "payload" : {"id" : 123, "name" : "démolition"}
  "weight" : 1
}

Lors de l'utilisation du suggest, j'utilise la requête suivante :

GET /mon_index/_suggest?pretty=true
{
  "category_suggest" : {
    "text" : "de",
    "completion" : {
      "field" : "suggest",
      "size" : "10"
    }
  }
}

Le problème que je rencontre est que les résultat rencontrés sont classés par ordre alphabétique ascendant, ce qui considère que la lettre "e" est avant la lettre "é".
Je me retrouve donc avec les résultats dans cet ordre : dentiste, démolition, dépannage
Or, j'aimerai que les accents ne soient pas pris en compte lors du classement.
A savoir : démolition, dentiste, dépannage

J'ai tenté certains analyzer et filters basés sur ICU afin d'enlever les accents dans l'index_analyzer sans succès.

En solution de contournement j'ai retirer les accents avant de remplir l'output car apparement le classement est fait sur ce champ et j'utilise la valeur du champ name que je rempli dans le payload. J'aimerai plutôt utiliser la valeur du champ output ce qui réduirai la taille du flux de retour.

Pourriez-vous m'éclairer sur la bonne manière de procéder ?
Merci.

Florian Grousset


(Camilo Sierra) #2

Bonjour @Florian_Grousset , il faut utiliser le filter ASCII Folding pour eviter le probleme avec les accents (pour plus d'info tu peut lire aussi https://www.elastic.co/guide/en/elasticsearch/guide/master/asciifolding-token-filter.html )


(system) #3