2009-06-12 6 views
0

J'ai une table pleine de noms de domaine. J'aimerais faire une recherche qui renvoie des résultats de pertinence à ce sujet. Mon problème, c'est que si je fais une recherche de "cool", je veux que ça renvoie "cooldomain.com", ce qui n'est pas le cas d'une recherche en texte intégral, à moins que je ne me trompe.Mysql Rechercher des noms de domaine

Existe-t-il des options de texte intégral que je ne connais pas qui vont accomplir cela? Sinon, comment pourrais-je y aller?

Répondre

0

J'utilise comme ici, la recherche plein texte est pour faire correspondre contre de mots entiers ou expressions, extension des requêtes, etc. Et je pense que le * operator ne peut être utilisé comme suffixe lorsque en utilisant MATCH, donc vous manquerez imcool.com ...

Je pense que vous devrez rassembler plus d'informations pour faire un tri de pertinence.

Edit: Si vous voulez utiliser un index, vous pouvez également stocker les mots du domaine dans une autre colonne, et utiliser la puissance de la recherche plein texte sur celui-ci ...

+0

* soupir * espérait une meilleure solution que cela. J'ai une colonne séparée, mais il est soumis par l'utilisateur, donc je ne peux pas garantir qu'ils vont le faire correctement. –

0

Bon vieux WHERE domain LIKE '%cool%' va correspondre, mais ne retourne pas "pertinence" - Je ne suis pas sûr de la façon dont vous définissez cela.

+0

le problme avec ce que « % cool% » LIKE ne pas utiliser l'indice disponible, ce qui ralentit la recherche de manière significative si j'ai fini avec une assez grande table. –

0

Essayez quelque chose comme

SELECT * FROM domains WHERE domain_name LIKE 'cool%'; 
+0

"cooldomain.com" était juste un exemple. LIKE 'cool%' ne correspondra pas à "awesomecool.com". –

+0

Vous pouvez également traiter chaque domaine en stockant des sous-chaînes de longueur 1 à la longueur du domaine complet dans une autre table, reliant chaque sous-chaîne au domaine principal. Cela nécessiterait plus de traitement lors du stockage de chaque domaine, mais rendrait la recherche assez rapide. pour cooldomain.com (par exemple), vous stockez 'c', 'o', ..., 'co', 'oo', ..., 'coo', ..., 'cool', ' oold ', ..., etc ..., ce qui fait correspondre un exercice de correspondance exacte seulement, plutôt que de correspondance de modèle. Comme un index de recherche, mais pour les caractères de la chaîne. –

0

Vous aurez besoin pour définir un index FULLTEXT à votre table et faire quelque chose comme ceci:

SELECT *, MATCH(domain_name) AGAINST ('{search term here}' IN BOOLEAN MODE) as Relevance 
FROM domains 
WHERE MATCH (domain_name) AGAINST('{search term here}' IN BOOLEAN MODE) 
ORDER BY Relevance DESC 
Questions connexes