我有一张化学物质表,名为substances
。我正在尝试使用MySQL的full text natural language功能阻止搜索工具。
我已运行以下命令以允许此类命令在substances
列的name
表上运行:
ALTER TABLE substances ADD FULLTEXT(`name`);
如果我运行以下命令,它会给我任何包含“Chromium”或“Trioxide”字样的结果:
SELECT * FROM substances WHERE MATCH (`name`) AGAINST ('Chromium Trioxide' IN NATURAL LANGUAGE MODE);
然而,我想要做的只是找到包含“三氧化二铬”的行,即使它们之间有字符(例如“三氧化铬(VI)”)。我的理解是在每个单词之前使用+
会这样做:
SELECT * FROM substances WHERE MATCH (`name`) AGAINST ('+Chromium +Trioxide' IN NATURAL LANGUAGE MODE);
但是它给了我与原始查询相同的结果 - 即任何包含“Chromium”或“Trioxide”但不包含两者的东西。
我哪里错了?我已经阅读了布尔全文搜索(https://dev.mysql.com/doc/refman/5.7/en/fulltext-boolean.html),但我发现的唯一信息是在每个关键字前添加+
。
MySQL版本为5.7.9,表格为MyISAM。
答案 0 :(得分:0)
我不知道如何使用mysql布尔全文搜索或自然全文搜索来解决它,
但我认为可以使用REGEX(参见https://dev.mysql.com/doc/refman/5.7/en/regexp.html)
来完成SELECT * FROM substances WHERE `name` REGEXP 'Chromium .* Trioxide'