Ich muss rund eine Million Datensätze durchsuchen, um herauszufinden, ob ein eingegebener Firmenname in der Datenbank ist oder nicht, und wenn dies nicht der Fall ist, dann Vorschläge zum Ändern der Eingabe abhängig von dem, was in der Datenbank vorhanden ist. Vermutlich ist der FULLTEXT-Index der beste Weg, dies zu tun? Zum Beispiel, wenn die Eingabe war 'Einige Anwaltskanzlei LLP', aber das ist nicht auf der Datenbank als ein Firmenname, aber 'Einige Anwaltskanzlei' möchte ich 'Einige Anwaltskanzlei' als Vorschlag zurückgegeben werden. Oder vielleicht war 'Eine neue Kanzlei' in der Datenbank, die ich gerne zurückgeben würde.Wie kann ich die MySQL-Datenbank am schnellsten durchsuchen, um Strings zu finden?
Ich habe noch nie einen FULLTEXT-Index für eine Datenbank implementiert, also weiß ich nicht wirklich, wie man einen implementiert oder die entsprechende Abfrage erstellt, um Vorschläge zur Eingabe von Änderungen zurückzugeben.
Ich mache mir auch Sorgen, dass MySQL keine 3-Buchstaben-Strings als Wörter betrachtet, also wie würde ich Firmennamen wie "BBC" berücksichtigen? Ich weiß, dass ich so etwas wie verwenden:
$q = "SELECT company_name FROM wfp_contacts2 WHERE MATCH (company_name) AGAINST ('".stripslashes(str_replace(""", "\"", ($query)))."' IN BOOLEAN MODE)";
Um zu testen, ob es eine genaue Übereinstimmung in der Datenbank ist, und das ist gut - aber die Hauptsache ist, die Vorschläge zu bekommen. Ich kann nicht wirklich LIKE %'company_name'%
verwenden, weil es viel zu langsam ist und Geschwindigkeit ist zwingend erforderlich, da es bis zu 700 Eingaben geben wird, um auf Vorschläge sofort überprüft zu werden, und die LIKE
Aussage mit Platzhalter ist viel zu langsam auf einer Million Aufzeichnungen.
Gibt es mindestens Tutorials, die jeder empfehlen kann, damit ich mit der FULLTEXT-Indizierung auf dem Laufenden bin? Wenn es eine andere Möglichkeit gibt, dies zu tun, wäre ich dankbar, dies zu hören, da dies extrem wichtig ist und ich ehrlich gesagt nicht weiß, was ich im Moment tun soll.
MySQL Info: MySQL-Client-Version: 5.1.41 Storage Engine: MyISAM
Vielen Dank im Voraus.
Ja. Ein Match gegen einen Volltextindex ist wahrscheinlich der Weg – Strawberry
Ich dachte schon. Gibt es eine Möglichkeit, die Grenze von 3 Zeichen zu lösen? –
Siehe http://dev.mysql.com/doc/refman/5.5/en/fulltext-fine-tuning.html – Strawberry