Recherche efficace de nom prenom à partir d'un seul input

165 views
Skip to first unread message

Nicolas Martin

unread,
Apr 25, 2012, 6:27:45 AM4/25/12
to elastics...@googlegroups.com
Bonjour,

Je voudrais à partir d'un formulaire de recherche contenant qu'un seul input pouvoir effectuer des recherches sur plusieurs champs.

Voici la liste des champs et qq exemples d'enregistrements dont je dispose :
id |   nom    | prenom | numeroCommande
1  | dupont  | Michel   | AA01
2  | dupond | Marcel   | AA02
3  | Michel  | Lou       | AA02

J'ai réussi à utiliser le highlight afin de déterminer lorsque je fais une recherche globale si mon enregistrement a été trouvé dans tel ou tel champ.

Maintenant je voudrais pouvoir retrouver des enregistrements en recherchant un nom complet (nom + prénom) sachant que l'utilisateur devra pourvoir saisir le prénom avant le nom ou le contraire.

ex :
"michel dupont" doit retrouver les enregistrements 1 -  3 - 2 (par ordre de scoring)
idem si l'utilisateur tape "dupont michel"

J'avais déjà réalisé cela sous SOLR en créant 3 champs supplémentaires concaténant nom + prénom et de types différents (recherche stricte, phonétique et EdgeNGramFilterFactory). Ainsi je pouvais retrouver des enregistrements sans me soucier de l'ordre "nom prénom" ou "prenom nom", des erreurs syntaxiques "dupont ou dupond".

J'avais donc le schéma suivant
id |   nom    | prenom | nomCompletClient | nomCompletClientStrict | nomCompletClientEdgeNGram| numeroCommande


Je voudrais maintenant réaliser la même chose sous ES. Existe t'il une méthode plus simple pour effectuer ce type de recherche ? ou il est préférable que j'utilise d'autres champs liés à des analyseurs bien particuliers?

J'espere avoir été clair, Merci pour vos conseils :-)





florian espla

unread,
Apr 25, 2012, 9:51:07 AM4/25/12
to elastics...@googlegroups.com
Hello,

Tu peux faire un query_string sur le _all de l'index pour rechercher sur n'importe quel champ.
{
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "default_field": "_all",
            "query": "nom prenom",
            "default_operator":"AND"
          }
        }
      ]
    }
  }
}

Pour la gestion des fautes de frappes tu peux regarder du coté du fuzzing, quelque chose du genre (à vérifier)
""query"":""nom~0.71 prenom~0.71"",
  ""fuzzy_prefix_length"": 1,
 ""fuzzy_min_sim"": 0.71









--
---
Vous pouvez également poster et consulter les réponses en anglais sur le groupe Elasticsearch https://groups.google.com/group/elasticsearch
 
Si vous avez également posté votre question sur la mailing list elasti...@googlegroups.com, merci d'indiquer ici le lien vers cette discussion pour faciliter le suivi.
 
Twitter : @ElasticsearchFR https://twitter.com/#!/ElasticsearchFR
Site web (English) : http://www.elasticsearch.org/

Reply all
Reply to author
Forward
0 new messages