在 MariaDB 中搜索子字符串或单词
Posted
技术标签:
【中文标题】在 MariaDB 中搜索子字符串或单词【英文标题】:Searching a substring or word in MariaDB 【发布时间】:2018-01-08 01:05:24 【问题描述】:我尝试在 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 |
+---------------------------------+
当我对函数使用匹配时,我无法检索到我想要获得的相似度分数;
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”条目包含“大卫”模式,但得分返回 0。
你能帮我解决这个问题吗?
【问题讨论】:
全文索引不适用于*david*
。您将不得不使用不使用全文索引的LIKE '%david%'
。
实际上它起作用了。我试过 'david', 'david*', '%david%' 但他们没有处理结果。
【参考方案1】:
关于 * 通配符:
通配符,表示零个或多个字符。它只能出现在词尾。
来源: 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;
【讨论】:
以上是关于在 MariaDB 中搜索子字符串或单词的主要内容,如果未能解决你的问题,请参考以下文章