Je travaille actuellement sur un projet AppEngine, et j'aimerais mettre en œuvre la complétion automatique des termes de recherche. Les éléments qui peuvent être recherchés sont raisonnablement non équivoques et courts, donc je pensais à l'implémenter en donnant à chaque élément une liste de dactylogrammes incomplets. Donc, foobar
obtiendrait une liste comme [f, fo, foo, foob, fooba, foobar]
. Le texte de l'utilisateur dans la boîte de recherche est ensuite comparé à cette liste, et des correspondances positives sont suggérées.Comment formater les listes de pièces de complétion automatique de recherche?
Il y a quelques optimisations possibles dans cette liste que je pensais:
- espaces Suppression des signes de ponctuation à partir des termes de recherche.
Foo. Bar
àFooBar
. - Suppression des majuscules
- Suppression des particules principales telles que "le", "a", "an".
The Guy
seraitguy
, et indexé comme[g, gu, guy]
. - Ajout d'une sous-chaîne plus longue que 2 ou 3 à la liste d'indexation. Donc
The Guy
serait indexé comme[gu, guy]
. Je pensais que les suggestions qui ne correspondent qu'à la première lettre ne seraient pas aussi pertinentes.
Le terme de recherche d'utilisateur serait également formaté de cette manière, après quoi le DB serait recherché. En suggérant un terme de recherche, les particules, la ponctuation et les majuscules seraient ajoutées en fonction du nom complet de l'objet suggéré. Donc, la recherche de "the" ne donnerait aucune suggestion, mais la recherche de "The Gu .." ou "gu" suggérerait "The Guy".
Est-ce une bonne idée? Principalement: ce formatage aiderait-il, ou seulement causer des ennuis?
Est-il utile de diviser les mots sur les espaces? Comment faire correspondre la chaîne lorsque l'utilisateur tape _both_ mots dans la boîte de recherche? Avez-vous besoin de créer une requête DB distincte pour chaque mot? Comme 'word1 dans startings + word2 dans startings + word3 etc ...' – noio
Non, en fait vous pouvez juste cascader un filtre pour chaque mot: 'query.filter ('start' = 'mot1'). Filter ('start =' , 'word2') .... ' – jbochi