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

Einschränkungen bei der MySQL-Volltextindizierung?

Ganz sicher nicht!

Jeder Suchbegriff, der nur aus blockierten Wörtern besteht, schlägt stillschweigend fehl. Wörter können aufgrund von Mindest-/Maximallängenbeschränkungen und/oder der Stoppwortdatei blockiert werden.

Ich fand die Standard-Stoppwortdatei viel zu aggressiv, sie verhinderte viele gültige Suchen. Auch die standardmäßige Mindestlänge von 4 hat sich sehr oft für Akronyme eingesetzt, nach denen die Leute suchen möchten. Ich habe ft_min_word_len auf 3 reduziert und die Stopliste komplett entfernt (ft_stopword_file=''). Dokument:http://dev.mysql.com /doc/refman/5.1/en/fulltext-fine-tuning.html

Sie können die Suchanfrage auch daraufhin untersuchen, ob sie nur Wörter mit <4 Buchstaben enthält, und in diesem Fall auf eine LIKE-Suche zurückgreifen. Es gibt keinen so einfachen Weg, die Stoppliste auf Anwendungsebene zu umgehen.

Die Auswahl der „Wortzeichen“ entspricht möglicherweise nicht Ihren Anforderungen und ist schwierig zu ändern. Beispielsweise wird die Suche nach „Terry“ nicht mit „Terry's“ übereinstimmen. Im Allgemeinen gibt es keine Unterstützung für irgendwelche Wortstämme, also passt „biscuit“ auch nicht zu „biscuits“.

Schließlich gibt es, wie von cg erwähnt, keine Unterstützung für InnoDB. Heutzutage möchten Sie nicht alle Ihre Daten in einer MyISAM-Tabelle ablegen.

Wenn Sie über genügend Speicherplatz verfügen, können Sie die kanonische Hauptversion der Daten in einer InnoDB-Tabelle ablegen und dann eine separate MyISAM-Tabelle erstellen, die eine Kopie des Freitextinhalts enthält, nur zur Verwendung als Suchköder. Sie müssen beide Tabellen bei einer Änderung aktualisieren, aber wenn die MyISAM-Tabelle ihre Integrität verliert, verlieren Sie zumindest die Möglichkeit, die betroffenen Zeilen zu durchsuchen, anstatt die echten Live-Daten zu verderben und Anwendungsfehler zu erhalten.

Sie können dann, wenn Sie die Zyklen übrig haben, Ihre eigene Textverarbeitung für die Suchköder und Abfragewörter implementieren, um einige der oben genannten Einschränkungen zu umgehen. Sie können beispielsweise Zeichen, die Wortzeichen sein sollen, mit Escapezeichen versehen, Zeichen entfernen, die keine Wortzeichen sein sollen, und einfache manuelle englische Wortstämme durchführen.