MySQL - l'Efficacité de la recherche avec la partie de mot de match et la pertinence de la note (texte intégral)
Comment puis-je faire une base de données MySQL de recherche qui va correspondre à des mots partiels, mais aussi de fournir des informations exactes de la pertinence de tri?
SELECT name, MATCH(name) AGAINST ('math*' IN BOOLEAN MODE) AS relevance
FROM subjects
WHERE MATCH(name) AGAINST ('math*' IN BOOLEAN MODE)
Le problème avec la mode booléen est la pertinence renvoie toujours 1, de sorte que le tri des résultats n'est pas très bon. Par exemple, si je mets une limite de 5 sur les résultats de la recherche à ceux retournés ne semble pas être le plus pertinent parfois.
Si je recherche en langage naturel mode, ma compréhension est que la pertinence score est utile mais je ne peut pas correspondre à des mots partiels.
Est-il un moyen pour exécuter une requête qui répond à tous ces critères:
- Peuvent correspondre à des mots partiels
- Résultats sont restitués avec précision, à la pertinence de la
- Est efficace
Le meilleur que j'ai eu jusqu'à présent est:
SELECT name
FROM subjects
WHERE name LIKE 'mat%'
UNION ALL
SELECT name
FROM subjects
WHERE name LIKE '%mat%' AND name NOT LIKE 'mat%'
Mais je préfère ne pas être à l'aide de LIKE
.
OriginalL'auteur BadHorsie | 2015-02-02
Vous devez vous connecter pour publier un commentaire.
La nouvelle InnoDB fonction recherche de texte intégral dans MySQL 5.6 aide dans ce cas.
J'utilise la requête suivante:
où
( )
groupes de mots dans une sous-expression. Le premier groupe alike word%
sens; la seconde s'intéresse pour l'expression exacte. Le score est retourné en tant que float.L'ajout de
*
après mon terme de recherche a fait pour moi.OriginalL'auteur Seeghor7
J'ai obtenu une bonne solution (un peu) dupliate question d'un an plus tard:
MySQL - Comment obtenir les résultats de recherche de l'exactitude de la pertinence
OriginalL'auteur BadHorsie