2010-06-19 4 views
2

Quels sont les moyens possibles de contrôler la révérence des moteurs de recherche dans MySQL? Supposons que nous construisons un moteur de recherche pour un petit magasin en ligne où les acheteurs peuvent ajouter des choses à vendre. Le tableau est:contrôler la pertinence de la recherche dans MySQL

CREATE TABLE `products` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 
`title` VARCHAR(100) NOT NULL , 
`date` DATE NOT NULL , 
`buyer_level` INT(2) NOT NULL , 
FULLTEXT (
`title` 
) 
) ENGINE = MYISAM ; 

Je veux donner un poids pour les facteurs suivants:

  • titre: Matching le mot-clé de recherche d'entrée avec le titre, poids = 10.
  • Buyer_level: plus est mieux. le niveau pour l'acheteur d'or est de 10, les mauvais acheteurs sont 1. poids = 5.
  • Date: plus récent est mieux. poids = 5.

La question est, comment pouvons-nous rendre le résultat de MySQL le résultat basé sur la valeur du poids?
Exemple:
si nous avons les lignes suivantes dans le tableau:
1, IPhone, 22-5-2010,9
2, cas, 22-5-2010,1
si l'utilisateur rechercher sur Iphone, la première rangée devrait venir en premier et la deuxième rangée devrait devenir la dernière parce que le premier a plus de wight que le deuxième.

Répondre

0

Vous ne pouvez pas vraiment mettre du poids à la date, sauf si vous définissez plus précisément «plus récent».

ORDER BY (
    IF(title LIKE '%search%' ,10,0) 
    + buyer_level 
    + IF(5 - DATEDIFF(NOW(),date) < 0,0,5 - DATEDIFF(date,NOW())) 
) DESC, 
1
select IF(title='IPhone',10,0)+buyer_level from products; 

La date est un problème plus important, avec CURRENT_DATE(), vous pouvez comparer à la date actuelle. Mais vous devez trouver un bon moyen entre les nouvelles dates n'influence pas votre métrique à beaucoup et les anciennes dates n'influencent pas assez votre métrique.

Questions connexes