2017-07-13 4 views
0

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.

+0

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

Antwort

0

Ich weiß nicht, wie es lösen mysql boolean Volltextsuche oder natürliche Volltextsuche verwenden,

aber ich denke, dass REGEX mit getan werden kann (siehe https://dev.mysql.com/doc/refman/5.7/en/regexp.html)

SELECT * FROM substances WHERE `name` REGEXP 'Chromium .* Trioxide' 
Verwandte Themen