Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wildcard-Suche in der MySQL-Volltextsuche

Leider ist dies nicht mit einem MySQL-Volltextindex möglich. Sie können '*nited states' nicht abrufen sofort aus dem Index, weil linke Zeichen der wichtigste Teil des Index sind. Sie können es jedoch 'United Sta*' suchen .

// 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 durchsucht werden - selbst das kann manchmal nervig sein. Andernfalls würde ich vorschlagen, eine externe Volltext-Engine wie Solr zu verwenden oder Sphinx . Ich denke, Sphinx erlaubt Präfix- und Suffix-Wildcards, bei den anderen bin ich mir nicht sicher.

Sie könnten zu LIKE von MySQL zurückkehren -Klausel, aber auch hier Abfragen wie LIKE '%nited states' ausführen oder LIKE '%nited Stat%' , leidet auch unter der Leistung, da der Index nicht für die ersten paar Zeichen verwendet werden kann. 'United Sta%' und 'Unit%States' sind in Ordnung, da der Index gegen die ersten bekannten Zeichen verwendet werden kann.

Ein weiterer ziemlich großer Vorbehalt bei der Verwendung der Volltextindizierung von MySQL ist die Stoppwortliste und Mindestwortlängeneinstellungen . In einer gemeinsam genutzten Hosting-Umgebung sind Sie beispielsweise auf Wörter beschränkt, die größer oder gleich 4 Zeichen sind. Die Suche nach „Goo“, um „Google“ zu erhalten, würde also fehlschlagen. Die Stoppwortliste verbietet auch gängige Wörter wie 'und', 'vielleicht' und 'draußen' - tatsächlich gibt es insgesamt 548 Stoppwörter! Wenn Sie kein Shared Hosting verwenden, sind diese Einstellungen wiederum relativ einfach zu ändern, aber wenn Sie dies tun, werden Sie sich über einige der Standardeinstellungen ärgern.