【发布时间】:2018-09-01 20:15:22
【问题描述】:
某些字符(运算符)会影响 MariaDB 中全文搜索的行为。它们是+-<>()~*",它们的功能在documentation 中描述。
我希望能够搜索包含这些运算符之一的单词,并且我希望 MariaDB 将其作为普通字符而不是运算符来处理。我该怎么做?
示例:
让我们创建带有全文索引的表:
CREATE TABLE users (username TEXT, FULLTEXT(username)) ENGINE=InnoDB;
INSERT INTO users(username) VALUES ('joseph'), ('jose'), ('jose*');
现在我想搜索恰好包含 jose* 的行:
SELECT * FROM users WHERE MATCH(username) AGAINST('jose*' IN BOOLEAN MODE);
+----------+
| username |
+----------+
| joseph |
| jose |
| jose* |
+----------+
但我只想要jose* 的行。同样的结果是当我尝试以我期望的方式转义该字符串时。
SELECT * FROM users WHERE MATCH(username) AGAINST('jose\*' IN BOOLEAN MODE);
+----------+
| username |
+----------+
| joseph |
| jose |
| jose* |
+----------+
SELECT * FROM users WHERE MATCH(username) AGAINST('jose\\*' IN BOOLEAN MODE);
+----------+
| username |
+----------+
| joseph |
| jose |
| jose* |
+----------+
在 MariaDB/MySQL 中转义字符串以进行全文搜索的正确方法是什么?
【问题讨论】:
标签: mysql full-text-search mariadb