Wie erhalten Sie Ihre boolesche Volltext-Suche, um den Begriff C ++ aufzunehmen?

8

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.

    
Bamerza 25.02.2009, 06:45
quelle

4 Antworten

8
  

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 zu einer leeren Zeichenkette, da es nicht praktisch ist, alles darin auch als speziell aufzunehmen.

    
bobince 25.02.2009, 07:38
quelle
1

Aus Ссылка :

  

Eine Phrase, die in doppelte Anführungszeichen ("" ") eingeschlossen ist, stimmt nur mit Zeilen überein, die die Phrase wörtlich enthalten, wie sie eingegeben wurde.

Dies bedeutet, dass Sie mit dieser Abfrage nach 'C ++' suchen können:

%Vor%     
ambientsound 14.08.2009 08:03
quelle
0

Normalerweise werden Zeichen mit Escape-Zeichen in der Abfrage und nicht in den Datenbankdaten verwendet. Versuchen Sie, jedes "+" in Ihrer Abfrage zu umgehen.

    
Paxic 25.02.2009 06:51
quelle
0

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.?

    
keval dadia 06.12.2010 06:45
quelle