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.

Une option est de chercher des alternatives à mysql FULLTEXT comme le sphinx. sphinxsearch.com/blog/2014/02/07/use-sphinx-with-mysql

OriginalL'auteur BadHorsie | 2015-02-02