2017-08-01 98 views
2

我尝试在MariaDB上进行全文搜索,并遇到无法处理的问题。在MariaDB中搜索子字符串或单词

我的表格生成为;

CREATE TABLE test (email TEXT, FULLTEXT(email)) ENGINE=InnoDB; 

然后插入一些数据;

MariaDB [frauctive]> select * from test; 
+---------------------------------+ 
| email       | 
+---------------------------------+ 
| [email protected]    | 
| [email protected]    | 
| [email protected]    | 
| [email protected]    | 
| [email protected]   | 
| [email protected] | 
+---------------------------------+ 

当我使用功能匹配时,我无法检索到我想要获得的相似度分数;

MariaDB [frauctive]> SELECT email, MATCH(email) AGAINST('*david*' IN   BOOLEAN MODE) AS relevance 
-> FROM test ORDER BY relevance DESC; 
+---------------------------------+--------------------+ 
| email       | relevance   | 
+---------------------------------+--------------------+ 
| [email protected]    | 0.0906190574169159 | 
| [email protected]    | 0.0906190574169159 | 
| [email protected]   | 0.0906190574169159 | 
| [email protected]    |     0 | 
| [email protected]    |     0 | 
| [email protected] |     0 | 
+---------------------------------+--------------------+ 

Altough“[email protected]”条目包含“大卫”的格局,比分返回0

能否请你帮我解决这个问题相关?

+0

全文索引不与'*大卫*'工作。你将不得不使用'LIKE'%david%'',它不使用全文索引。 – Adder

+0

其实它工作。我试过'大卫','大卫*','%大卫%',但他们没有处理结果。 –

回答

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; 
+0

我尝试了两种,但他们也没有工作。 –

相关问题