Also muss ich herausfinden, wie man eine boolesche Volltext-Suche in einer MySQL-Datenbank durchführt, um einen Datensatz zurückzugeben, der den Begriff "C ++" enthält.
Ich habe meine SQL-Suchzeichenfolge wie folgt:
%Vor%Obwohl alle meine Felder die Zeichenfolge C ++ enthalten, wird sie in den Suchergebnissen nie zurückgegeben.
Wie kann ich MySQL ändern, um dies zu berücksichtigen? Ist es möglich?
Die einzige Lösung, die ich gefunden habe, wäre, das Zeichen + während der Eingabe meiner Daten als etwas wie "__plus" zu entgehen und dann meine Suche anzupassen, aber das scheint umständlich und es muss einen besseren Weg geben.
Wie kann ich MySQL ändern, um dies zu berücksichtigen?
Sie müssen die Vorstellung von MySQL ändern, was ein Wort ist.
Erstens ist die Standard-Mindestwortlänge 4. Das bedeutet, dass kein Suchbegriff, der nur Wörter mit & lt; 4 Buchstaben enthält, jemals übereinstimmen wird, ob das nun "C ++" oder "cpp" ist. Sie können dies mit der ft_min_word_len Konfigurationsoption konfigurieren, z. in deiner my.cfg:
%Vor%(Stoppen / starten Sie MySQLd und erstellen Sie Volltextindizes neu.)
Zweitens ist "+" kein Buchstabe von MySQL. Sie können es zu einem Buchstaben machen, aber das bedeutet, dass Sie nicht in der Zeichenfolge "Fisch + Chips" nach dem Wort "Fisch" suchen können, daher ist etwas Vorsicht geboten. Und es ist nicht trivial: Es erfordert das Neukompilieren von MySQL oder das Hacken eines vorhandenen Zeichensatzes. Lesen Sie den Abschnitt, der mit "Wenn Sie die Zeichengruppe ändern möchten, die als Wortzeichen gelten ..." in Abschnitt 11.8.6 des Dokuments.
entkomme das Zeichen + während der Eingabe meiner Daten als etwas wie "__plus" und ändere dann meine Suche, um sie anzupassen
Ja, so etwas ist eine gebräuchliche Lösung: Sie können Ihre "echten" Daten (ohne das Entweichen) in einer primären, endgültigen Tabelle aufbewahren - normalerweise unter Verwendung von InnoDB für die ACID-Konformität. Dann kann eine zusätzliche MyISAM-Tabelle hinzugefügt werden, die nur die verfälschten Wörter für den Volltext-Such-Köder enthält. Sie können mit diesem Ansatz auch eine begrenzte Form der Stammbildung durchführen.
Eine weitere Möglichkeit besteht darin, Suchvorgänge zu erkennen, die MySQL nicht ausführen kann, z. B. solche mit nur kurzen Wörtern oder ungewöhnlichen Zeichen, und auf eine einfache, aber langsame LIKE- oder REGEXP-Suche nur für diese Suchvorgänge zurückgreifen. In diesem Fall möchten Sie wahrscheinlich auch die Stoppliste entfernen, indem Sie ft_stopword_file
Lösung ::
Ändern Sie die Datei my.ini
setze diese zwei Zeilen
%Vor%unten
%Vor%als save Datei und mysql Server neu starten.
my.ini
Datei wird von allen erstellt. Also können wir Änderungen in my.ini
file nur für einige Sessions machen.?
Tags und Links escaping mysql search full-text-search boolean