2010-11-24 11 views
0

Ich habe eine ASP.NET-Webanwendung und eine List<Product> auf dem Server (in der Anwendung [] speichern). Klassenprodukt hat eine Name-Eigenschaft. Ich muss Benutzern die Möglichkeit geben, nach Produkten zu suchen, die auf Namen basieren. Zum Beispiel, wenn der Benutzer "Honda Computer" eingibt, muss die App "2001 Honda Passport Engine Computer (OEM)" anzeigen. Die Suche muss sehr schnell sein, in Zukunft werde ich Autocomplete-Funktionalität (AJAX) hinzufügen..NET-Anwendung - Suche Problem

Bisher hatte ich ein paar Ideen, wie dieses Problem zu lösen:

  1. schreiben oder eine Open-Source-Implementierung von so etwas wie B-Baum, Trie, Suffixbaum, Präfix-Baum verwenden. Leider sind Datenstrukturen und Algorithmen nicht meine stärkste Fähigkeit (verdammt Harvard, so viel Geld für nichts).

  2. Verwenden Sie eine Suchmaschine - Lucene.NET, Velocity oder MemCached.NET. Niemals benutzt, also weiß ich nicht, ob sie in diesem Szenario funktionieren werden. Ich muss nicht nach Synonymen suchen und meine App hat keine Zugriffsrechte für das Dateisystem (also keine Indexdatei).

Jeder Rat ist willkommen.

Antwort

0

Je nachdem, wie viele Daten Sie haben, wäre die Verwendung einer suffix tree eigentlich eine sehr gute Idee. Im Allgemeinen werden Benutzer vom Anfang einer Phrase aus tippen, wenn eine Textbox Auto-Suggestion aktiviert hat und Sie den Baum auf der Basis der Zeichen suchen können, die von der Benutzereingabe eingegeben werden, wie es ein Suffix-Baum wäre Filtern Sie automatisch die möglichen Vorschläge und geben Sie auch die Vorschläge zur Anzeige, indem Sie den Baum navigieren.

Während es wahr ist, dass sie schwierig zu implementieren sein können, können Sie möglicherweise eine für .NET bereits geschrieben finden. Da sie jedoch sehr nützlich sind, können Sie einige gute Materialien finden with information on how to write your own.

1

Sind diese Produkte an irgendeiner Stelle in einer Datenbank gespeichert? Viele populäre Datenbanken (einschließlich Microsoft SQL Server) unterstützen die Indexierung von Freitextsuchen, was eine schnelle Möglichkeit zur Textsuche in großen Datenmengen darstellt.

+0

Kann nicht, DB ist nicht meine Kontrolle. Ich muss den Produktkatalog beim Programmstart in den Speicher laden. –

+0

Nun, tun Sie definitiv nicht Ihre eigene Implementierung der oben genannten Algorithmen. Hast du so etwas probiert? http://www.codedigest.com/CodeDigest/52-Search-in-Generic-List-T--in-C-.aspx –