2017-08-01 93 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

我嘗試了兩種,但他們也沒有工作。 –

相關問題