2016-09-08 2 views
0

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.

+0

Ja. Ein Match gegen einen Volltextindex ist wahrscheinlich der Weg – Strawberry

+0

Ich dachte schon. Gibt es eine Möglichkeit, die Grenze von 3 Zeichen zu lösen? –

+0

Siehe http://dev.mysql.com/doc/refman/5.5/en/fulltext-fine-tuning.html – Strawberry

Antwort

0

Sie können mit Indizierung Datenbank/Dokument wie Solr-Suchmaschine gehen.

Wenn das Suchergebnis ist schneller und Sie können auch Rechtschreibprüfung implementieren, die hilft, Vorschläge für die Suche nach einem Wort.

FYR http://lucene.apache.org/solr/features.html

+0

Ich werde einen Blick - danke. –

Verwandte Themen