2010-11-24 26 views
0

J'ai une application Web ASP.NET et un List<Product> sur le serveur (dans le magasin Application []). Le produit de classe a une propriété Name. Je dois donner aux utilisateurs la possibilité de rechercher des produits en fonction des noms. Par exemple, si l'utilisateur tape «ordinateur honda», l'application doit montrer «2001 Honda Passport Engine Computer (OEM)». La recherche doit être très rapide, à l'avenir je vais ajouter des fonctionnalités de saisie semi-automatique (AJAX).Application .NET - problème de recherche

Jusqu'à présent, j'eu quelques idées comment résoudre ceci:

  1. écrire ou utiliser une implémentation open source de quelque chose comme B-Tree, Trie, arbre Suffixe, arbre Prefix. Malheureusement, les structures de données et les algorithmes ne sont pas mes compétences les plus solides (sacrément Harvard, tant d'argent pour rien).

  2. Utilisez un moteur de recherche - Lucene.NET, Velocity ou MemCached.NET. Je n'en ai jamais utilisé un, donc je ne sais pas s'ils vont travailler dans ce scénario. Je n'ai pas besoin de chercher des synonymes et mon application n'a pas les permissions pour accéder au système de fichiers (donc pas de fichier d'index).

Tout conseil est le bienvenu.

Répondre

0

Selon la quantité de données dont vous disposez, l'utilisation d'un suffix tree serait vraiment une très bonne idée. Généralement les utilisateurs vont taper depuis le début d'une phrase quand une boîte de texte a la suggestion automatique activée et puisque vous pouvez rechercher l'arbre sur la base des caractères qui sont entrés par l'entrée d'utilisateur comme elle, un arbre de suffixe serait filtrer automatiquement les suggestions possibles et également vous fournir les suggestions à afficher en naviguant dans l'arborescence.

S'il est vrai que leur implémentation peut être compliquée, vous pouvez peut-être en trouver une déjà écrite pour .NET. Cependant, parce qu'ils ont tendance à être très utile, vous pouvez trouver quelques bons matériaux with information on how to write your own.

1

Ces produits sont-ils stockés dans une base de données à tout moment? De nombreuses bases de données populaires (y compris Microsoft SQL Server) prennent en charge l'indexation de recherche en texte libre, qui constitue un moyen rapide de rechercher du texte sur de grands ensembles de données.

+0

Impossible de faire cela, DB est hors de mon contrôle. Je dois charger le catalogue de produits en mémoire au démarrage de l'application. –

+0

Eh bien, ne faites certainement pas votre propre implémentation des algorithmes que vous avez mentionnés plus haut. Avez-vous essayé quelque chose comme ça? http://www.codedigest.com/CodeDigest/52-Search-in-Generic-List-T--in-C-.aspx –