2017-08-01 2 views
2

J'essaie de faire une recherche de texte intégral sur MariaDB et j'ai rencontré un problème que je ne peux pas gérer.Recherche dans une sous-chaîne ou un mot dans MariaDB

ma table est générée comme;

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

puis d'insérer des données;

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

lorsque j'utilise match contre la fonction, je ne peux pas récupérer le score de similarité que je veux obtenir;

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]" entrée contient modèle 'david', le score retourne 0.

Pouvez-vous s'il vous plaît me aider à résoudre ce problème pertinence?

+0

L'indice de texte intégral ne fonctionne pas avec '* david *'. Vous devrez utiliser 'LIKE '% david%'' qui n'utilise pas l'index fulltext. – Adder

+0

En fait, cela a fonctionné. J'ai essayé 'david', 'david *', '% david%' mais ils n'ont pas géré le résultat. –

Répondre

0

environ caractère générique *:

Le caractère générique, ce qui indique zéro ou plusieurs caractères. Il ne peut apparaître qu'à la fin d'un mot.

source: https://mariadb.com/kb/en/mariadb/fulltext-index-overview/

s'il vous plaît essayer:

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

Ou

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

J'ai essayé les deux mais ils ne fonctionnaient pas non plus. –