Art der search nach 30.000 SQL Records

Ich bin im Begriff, eine einfache Suchfunktion auf meiner Website zu machen, wo ein Benutzer rund 2-4 Schlüsselwörter eingeben wird, die in zwei Spalten in einer Tabelle in meiner MS SQL database gesucht werden. Eine Spalte ist ein Varchar (50) genannt Titel und eine Spalte ist ein Varchar (2500) genannt Beschreibung. Es werden etwa 20.000-30.000 datasätze potenziell zu jeder time zu suchen.

Die Schlüsselwörter müssen "die besten Spiele" zurückgeben – du kennst die Art, die du auf Suchseiten wie ebay bekommst, die die nächsten Spiele zurückgeben. Die Art, wie ich dachte, dies zu tun, ist irgendwie naiv – ich dachte, ich kann alle 30.000 Platten des Tisches in und object wie folgt lesen:

public class SearchableObject { string Title {get; set;} string Description {get; set;} int MatchedWords {get; set;} } 

Dann erstellen Sie eine list dieses objects zB list durchlaufen alle 30.000 datasätze, füllen Sie die list, finden Sie heraus, diejenigen, die die meisten Male passen und die Top 10 mit so etwas wie

  if Description.contains(keyword1); 

Aber dann finde heraus, wie oft es in der characterfolge auftritt, um das MatchedWords-Feld zu füllen.

Meine Frage ist, ist das der beste path, dies zu tun? Wenn nicht, was wäre?

Sie sollten eine Volltext-Indizierungslösung verwenden. MS SQL server 7 und höher hat eine Volltext-Indizierungs-Engine eingebaut ( hier ist ein anständiger Übersichtsartikel ). Sie könnten auch überlegen, externe Produkte wie Lucene (verfügbar für Java und C # / NET ).

Ich denke, du willst nur C # verwenden, um die Suchparameter zu parsing, nicht wirklich die search und Aggregation durchzuführen … Also nein, es ist nicht wirklich der beste path. Verwenden Sie SQL server, um die search schwer zu heben.

casting Sie einen Blick auf lucene für .net, das erlaubt vollständigen Index Ihres Textes.

http://incubator.apache.org/lucene.net/

Die .net-Entwickler auf dieser Seite können Ihnen sagen, ob es bessere Alternativen gibt

Wenn du mit Java oder C # arbeitest , würde ich Lucene bzw. Lucene.NET empfehlen.

Verwenden Sie eine Volltextsuchmaschine wie Lucene . Es gibt auch eine .NET Version .