MySQL Volltextsuche

Heute spielte ich langsam zu optimieren SQL Anwendung der Gattung

SELECT * FROM 'table' WHERE `field` LIKE '%word%'

Wo ist das Problem jetzt hier – der letzte Teil '% Wort%’ und in noch spezifischeren Zeichen % vor dem Wort, was tun. Wildcard-Symbol % ,vor jedem Wert, direkt macht uns direkt in langsame Abfragen, denn auf diese Weise uns die Anwendung nicht mehr Indizes Feld zu verwenden,. Entscheidungen wie immer, aber nicht immer klar 😆 Insgesamt MySQL Sie haben eine Lösung für dieses Problem Volltextsuche Indexierungsfeld. Wie ist die Änderung des Feldes es ist in der Dokumentation viel geschrieben., aber in Eile werde ich beschreiben, wie ich die oberste Anforderung ändern, Da wir ein kleines Drama endlich bekommen. Bilden Sie eine niedliche je nach Volltext-Feld, die Abfrage soll im Formular geändert werden:

SELECT * FROM `table` WHERE MATCH (field) AGAINST ('word')

Also die Struktur ist klar und besteht keine Notwendigkeit für unnötige Diskussion. Die obige Abfrage wird in Kraft treten., Wenn das Wort, wofür Sie mindestens eine Anfrage machen 4 Das symbol, Dies ist der Standardwert, Wenn Sie es ändern möchten, müssen Sie den Wert angeben., Sie wollen in meinem. Cnf im Teil [mysqld] Erklärung ft_min_word_len= 3 oder 2, 1 keine gute Wahl offensichtlich 😉 . Nachdem Sie den Wert und Neustart MySQL-Server-Bedarf Reparatur auf Ihre Tabellen zu tun ändern, Auftrag für die neue Indizierung in Kraft treten. So weit ist alles klar: Änderungen, zurückstellen, rebildvam Indizes und tun, um meine Anfrage und kehrt 0 Überprüfung der Bestellung 😀

SHOW VARIABLES

Ich sehe, dass die Werte, Ich habe in Kraft gefragt, rebildvam wieder Indizes – gleiche Ergebnis. unangenehm 🙄, sehr unbequem. Von hier aus begann eine große Fluchen und den Schlüssel zum Schuppen Kratzen 😀, der ganz war, ziemlich interessant. auf die gesamte, Ich begann Dokumentation zu lesen nicht wissen, welche Straße und kam zu einer interessanten Passage

Diese Technik funktioniert am besten mit großen Sammlungen (eigentlich, es wurde sorgfältig auf diese Weise abgestimmt). Für sehr kleine Tische, Wortverteilung nicht angemessen ihre semantischen Wert widerspiegeln, und dieses Modell kann manchmal erzeugen bizarre Ergebnisse. Beispielsweise, obwohl das Wort ist in jeder Zeile der Artikel Tabelle weiter oben gezeigt vorhanden "MySQL", eine Suche nach dem Wort erzeugt keine Ergebnisse

BEAM 😳 geben meinen Korb klein – Und doch war es ein Test. Unsere Anwendung in einem großen Tisch 2 000 000 Ordnung und es gibt Dinge, schlief. Nun jetzt klar Problem. Um deutlich zu machen Entscheidung, Ich werde kurz erwähnen, dass unterstützt Volltextsuche 3 erweiterten Modus BOOLESCHER WERT , AUSDRÜCKEN und NATÜRLICHE SPRACHE als das letzte Werk von Standard. Für Modi können die Dokumentation prüfen, Ich werde erklären, 2-3 BOOLEAN Worte, weil es der Schlüssel ist,. Es unterstützt logische Operatoren wie zum UND, ODER , NICHT und so weiter und kann etwas Magie mit populären Phrasen machen, haben ein, keine andere usw.. Pflegen und Symbole *, das entspricht einem Wildcard-Symbol % Es ist nützlich, 😉, wenn der Suchbegriff kleiner ist als die Länge der ft_min_word_len oder kleine Tabletts ;). Zumindest für mich mit etwa einem Tisch 100 Um tut perfekten Job. So dass nur sehen und Anforderung abgeschlossen:

SELECT * FROM `table` WHERE MATCH (field)
AGAINST ('*word*' IN BOOLEAN MODE)

Hier kommt der Moment, ob unsere Indizierung mit Wildcard-Zeichen funktioniert – die Antwort ist, ich weiß nicht,. Ich denke, im Prinzip, als zu, Da sie nicht in der Dokumentation angegeben ist, aber in der Dokumentation offenbar nicht sagen oder eine Menge Dinge 😀 zeigen

zemanta ausgebaut.

2 Kommentare

Hinterlasse eine Antwort

Deine Email-Adresse wird nicht veröffentlicht. erforderliche Felder sind markiert *

Anti-Spam *