2013-12-19 22 views
6

Wie in MySQL abfragen Volltext mit Suche, damit wir wie unten Ergebnis:Suche Wildcard in MySQL Volltextsuche

nited vereint wird, und oogle bekommt google


Wie wir mit LIKE-Operator tun können: %nited and %oogle

+0

wäre es hilfreich, eine Idee über die Quelle oder Teile von ihnen zu haben – devanand

+0

Sie müssen auf Ihre Frage zu erweitern. So wie es aussieht, wird es geschlossen sein. – TheCarver

Antwort

15

Leider können Sie dies nicht mit einem MySQL-Volltextindex tun. Sie können '*nited states' nicht sofort aus dem Index abrufen, da linke Zeichen der wichtigste Teil des Indexes sind. Sie können jedoch Suche 'United Sta*'.

// the only possible wildcard full-text search in MySQL 
WHERE MATCH(column) AGAINST ('United Sta*' IN BOOLEAN MODE) 

Der Volltext von MySQL funktioniert am besten, wenn ganze Wörter in Sätzen gesucht werden - auch das kann manchmal lutschen. Andernfalls würde ich vorschlagen, eine externe Volltext-Engine wie Solr oder Sphinx zu verwenden. Ich denke, Sphinx erlaubt Präfix- und Suffix-Wildcards, nicht sicher über die anderen.

Sie könnten LIKE Klausel MySQL zurückgehen, aber wieder, das Ausführen von Abfragen wie LIKE '%nited states' oder LIKE '%nited Stat%', wird auch auf die Leistung darunter leiden, da sie nicht den Index auf den ersten Zeichen verwenden können. 'United Sta%' und 'Unit%States' sind okay, da der Index gegen die erste Gruppe bekannter Zeichen verwendet werden kann.

Ein weiterer ziemlich großer Vorbehalt bei der Volltextindizierung von MySQL ist die Stoppwortliste und minimum word length settings. In einer Shared Hosting-Umgebung sind Sie beispielsweise auf Wörter begrenzt, die größer oder gleich 4 Zeichen sind. Die Suche nach "Goo", um "Google" zu erhalten, würde also scheitern. The stop-word list verbietet auch gängige Wörter wie "und", "vielleicht" und "draußen" - tatsächlich gibt es 548 Stop-Wörter zusammen! Auch wenn Sie Shared Hosting nicht verwenden, können diese Einstellungen relativ einfach geändert werden, aber wenn Sie dies tun, werden Sie mit einigen der Standardeinstellungen verärgert sein.

+0

Danke für deine Zeit für meine Frage. So, nun, Sphinx unterstützt diese Art Abfrage. – harry34

+0

@ harry34, ich denke, es tut ja, aber erfordert auch einen dedizierten/virtuellen Server, nicht Shared Hosting. Die Geschwindigkeit von Sphinx oder Solr ist erstaunlich im Vergleich zu MySQLs FT-Suche. Es ist ein anderes Konzept - ich schlage vor, zuerst gründlich gelesen zu werden. – TheCarver

+0

Ich glaube nicht, dass es Shared Hosting gibt, das die Version 5.6 von mysql inndob + Volltextsuche unterstützt. – harry34