Ich habe eine Tabelle mit chemischen Substanzen, genannt substances
. Ich versuche, eine Suchfunktion zu erzwingen, die die full text natural language-Funktionen von MySQL nutzt.MySQL boolesche Volltextsuche funktioniert nicht wie erwartet
Ich habe laufen die folgenden auf solche Befehle ermöglichen die Arbeit an meinem substances
Tabelle auf der name
Säule:
ALTER TABLE substances ADD FULLTEXT(`name`);
Wenn ich den folgenden Befehl ausführen, es gibt mir alle Ergebnisse, die entweder das Wort „Chromium“ enthalten oder „Trioxyd“ wie erwartet:
SELECT * FROM substances WHERE MATCH (`name`) AGAINST ('Chromium Trioxide' IN NATURAL LANGUAGE MODE);
aber, was ich tun möchte, ist nur die Zeilen finden, die „Chromtrioxid“ enthalten, auch wenn es Zeichen zwischen ihnen (zB „Chrom (VI) Trioxyd“). Mein Verständnis ist, dass ein mit +
vor jedem Wort dies tun würde:
SELECT * FROM substances WHERE MATCH (`name`) AGAINST ('+Chromium +Trioxide' IN NATURAL LANGUAGE MODE);
Aber es gibt mir die gleichen Ergebnisse wie die ursprüngliche Abfrage - das heißt alles, was entweder „Chromium“ oder „Trioxyd“ aber nicht beides enthält.
Wohin gehe ich falsch? Ich habe Boolean Full Text-Suchen (https://dev.mysql.com/doc/refman/5.7/en/fulltext-boolean.html) gelesen, aber die einzige Information, die ich fand, war, die +
vor jedem Schlüsselwort einzuschließen.
MySQL-Version ist 5.7.9 und die Tabelle ist MyISAM.
Während Sie lesen grundsätzlich richtig, um den booleschen Modus (der Modifikatoren wie '+' unterstützt) zu verwenden, müssen Sie 'IN BOOLEAN MODE' anstelle von' IN NATURAL LANGUAGE MODE' schreiben. – Solarflare