web-dev-qa-db-fra.com

Interface de recherche - "tous les mots", "correspondance partielle", "expression exacte"

Je conçois une application de bureau (trucs de comptabilité ennuyeux) et j'ai une fonction "produit de recherche".

Je veux avoir un joli champ de recherche "intelligent". Actuellement, la zone de recherche fonctionne en divisant tous les mots spécifiés et en recherchant tous les enregistrements qui correspondent partiellement à n'importe lequel d'entre eux.

Maintenant, je suis confronté au dilemme suivant: Je veux vraiment fournir un moyen de spécifier si l'utilisateur veut faire correspondre any ou all les mots spécifiés. Quelle serait une bonne approche?

Un autre problème est que peut-être un utilisateur souhaite effectuer une correspondance exacte. Encore une fois, je veux que l'application soit simple à utiliser.

Pour le moment, je viens de lancer trois boutons radio sur le formulaire, mais je me sens sale à l'intérieur ... des opinions?

21
Leonardo Herrera

Google a résolu ce problème il y a longtemps - inutile de réinventer la roue. ;)

Je vous suggère de supprimer la nécessité de choisir et d'effectuer trois recherches en même temps: "phrase exacte" , "correspond à tous les mots" , ET "correspond à tout" . Unissez ensuite ("union" SQL) ces résultats dans cet ordre et présentez-les à l'utilisateur.

Inconvénients:

  • plus de charge sur votre base de données.

Positifs:

  • plus naturel pour l'utilisateur: si quelqu'un entre plusieurs mots, il sait très probablement ce qu'il cherche; ils ne tirent pas dans le noir en essayant d'obtenir au moins un mot à droite
  • correspond à l'expérience sur les moteurs de recherche
  • enregistre un clic dans l'interaction = fait gagner du temps.

Assurez-vous de supprimer les mots parasites de la phrase de recherche et de normaliser les cas/conjugaisons, etc .; il vous aidera à trouver les résultats dont vos utilisateurs ont besoin, même s'ils tapent les mots recherchés dans le mauvais cas/au bon moment/avec le mauvais article.

Assurez-vous également que la recherche fonctionne uniquement avec le clavier (c'est-à-dire sans forcer l'utilisateur à utiliser la souris. <search phrase> <Enter> devrait suffire pour obtenir des résultats).

26
Erion

Mon opinion personnelle est que vous devez fournir à l'utilisateur un moyen d'affiner la recherche, car:

  1. Vous l'avez déclaré comme votre objectif ("Je veux vraiment ...") et peu importe l'approche automatique que vous adoptez, vous ne permettrez pas à l'utilisateur de choisir.
  2. Gmail (qui est une application - plus similaire à votre propre application que la recherche sur le Web) vous permet d'afficher et d'affiner les options de recherche.
  3. Même la recherche Google régulière permet à l'utilisateur d'affiner les résultats manuellement, c'est-à-dire que si la chaîne de recherche est entre guillemets, il la recherchera dans son ensemble.
  4. En tant qu'utilisateur expérimenté, si je connais mes critères, prendre des décisions automatiques pour moi et mélanger mes résultats selon un algorithme que je ne connais pas, est vraiment contre moi.

La façon dont je suggère de le faire est quelque peu similaire à ce que Chris a suggéré.

Extrait de DeepDyvealt text

Une fois que vous avez appuyé sur la touche "affiner", vous pouvez soit ouvrir immédiatement une liste déroulante, soit même utiliser une petite boîte de dialogue si, à l'avenir, vous avez l'intention d'ajouter plus d'options de recherche.

5
Dan Barak

Si l'espace est la principale préoccupation, avez-vous pensé à utiliser une liste déroulante? Bien que ce ne soit peut-être pas une solution brillante (car elle nécessite plus de clics), elle prendrait moins de place qu'un ensemble de boutons radio.

L'option actuelle apparaîtrait avec l'expandeur pour permettre les autres choix.

       +-----------------+---+ +---------------------+ +----+
Search | exact phrase    | V | |                     | | Go |
       +-----------------+---+ +---------------------+ +----+
       | all words           |
       | any words           |
       | exact phrase        |
       +---------------------+

(excusez le mauvais art ascii)

Un raffinement pourrait être d'effectuer la liste déroulante lorsque la souris survole l'expandeur plutôt que l'utilisateur ne doit cliquer, mais encore une fois, ce n'est pas une solution idéale.

4
ChrisF

Je tuerais les options de recherche - je ne pense pas que ce soit la façon dont vos utilisateurs pensent, mais, comme le mantra de l'interface utilisateur le fait, testez-le avec de vrais utilisateurs et voyez ce qu'ils pensent.

Habituellement, les moteurs de recherche priorisent comme ceci:

  1. Essayez de trouver le tout (le ET)
  2. Essayez de trouver la présence de mots individuels ensemble
  3. Essayez de trouver des fragments des mots (tiges - vous tapez "donner un coup de pied", cela correspond à "donner un coup de pied" aussi)
2
Julian H

Entièrement d'accord avec Erion - pas besoin que l'utilisateur choisisse ce genre de chose - demandez à votre moteur de recherche (quel qu'il soit) de le faire pour vous.

Quelle que soit la technologie utilisée par votre back-end pour la recherche, il existe des moyens de hiérarchiser les résultats en fonction des critères que vous souhaitez (c'est-à-dire comme Google le fait). Certains peuvent être plus difficiles à configurer que d'autres pour ce genre de choses, mais même une indexation de texte intégral SQL Server de base peut fournir ce niveau d'organisation des résultats de recherche.

Prenez simplement la décision pour la meilleure expérience utilisateur et demandez à vos ingénieurs (ou développeurs, si vous devez) de le faire fonctionner. C'est pour ça qu'ils sont là. Comme je suis aussi ingénieur, je peux dire ça :)

1
Charles Boyung

Si vous êtes curieux, les moteurs de recherche en texte intégral fonctionnent le plus souvent en utilisant la notation TD-IDF. Cela signifie terme fréquence-fréquence inverse du document . L'essentiel est qu'un document est plus pertinent si le terme de recherche y apparaît très fréquemment, ceci est actualisé par le nombre de documents dans lesquels le mot apparaît dans l'ensemble.

0
CambridgeMike