我尝试在 MariaDB 上进行全文搜索,但遇到了无法处理的问题。
我的表生成为;
CREATE TABLE test (email TEXT, FULLTEXT(email)) ENGINE=InnoDB;
然后插入一些数据;
MariaDB [frauctive]> select * from test;
+---------------------------------+
| email |
+---------------------------------+
| david@hotmail.com |
| michael@gmail.com |
| christian@gmail.com |
| david01@hotmail.com |
| davidblatt@hotmail.com |
| beckhamdavidbeckham@hotmail.com |
+---------------------------------+
当我使用 match against 函数时,我无法检索到我想要获得的相似度分数;
MariaDB [frauctive]> SELECT email, MATCH(email) AGAINST('*david*' IN BOOLEAN MODE) AS relevance
-> FROM test ORDER BY relevance DESC;
+---------------------------------+--------------------+
| email | relevance |
+---------------------------------+--------------------+
| david@hotmail.com | 0.0906190574169159 |
| david01@hotmail.com | 0.0906190574169159 |
| davidblatt@hotmail.com | 0.0906190574169159 |
| michael@gmail.com | 0 |
| christian@gmail.com | 0 |
| beckhamdavidbeckham@hotmail.com | 0 |
+---------------------------------+--------------------+
虽然“beckhamdavidbeckham@hotmail.com”条目包含“david”模式,但分数返回 0。
你能帮我解决这个相关问题吗?
最佳答案
关于 * 通配符:
通配符,表示零个或多个字符。它只能出现在单词的末尾。
来源: https://mariadb.com/kb/en/mariadb/fulltext-index-overview/
请尝试:
MariaDB [frauctive]> SELECT email, MATCH(email) AGAINST('david*' IN BOOLEAN MODE) AS relevance
-> FROM test ORDER BY relevance DESC;
或者
MariaDB [frauctive]> SELECT email, MATCH(email) AGAINST('david' IN BOOLEAN MODE) AS relevance
-> FROM test ORDER BY relevance DESC;
关于sql - 在 MariaDB 中搜索子字符串或单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45433160/