2009-02-27 3 views
0

J'utilise le FULLTEXT dans ma requête SQL pour rechercher les enregistrements.Comment afficher d'abord un enregistrement pertinent en utilisant FULLTEXT dans SQL?

 SELECT * FROM (SELECT d.DataId, (SELECT [Name] FROM Category WHERE CategoryId = d.CategoryId) AS 'Category', d.Description, d.CompanyName, d.City, d.CategoryId, 
       d.CreatedOn, d.Rank, d.voteCount, d.commentCount, d.viewCount 
     FROM Data d 
       INNER JOIN Keyword k 
        ON d.DataId = k.DataId 
     WHERE FREETEXT(k.Keyword, @SearchQ) AND [email protected] AND d.IsSearch=1 AND d.IsApproved=1 

Quand je suis à la recherche de hôtel Rockstone, j'ai un dossier avec le même nom dans ma table mais il affiche un autre record pour un premier et affiche ensuite le dossier « de l'hôtel Rockstone » à la position 3. Pourquoi cela se passe-t-il et quels sont les moyens d'améliorer cela?

J'utilise SQL Server 2005

Merci

Répondre

1

Vous avez pas clause Order By, ce qui libère la base de données pour renvoyer des enregistrements dans un ordre quelconque. Habituellement, c'est l'ordre dans lequel il les rencontre lorsqu'il traite la clause where, donc il est facile de croire qu'il y a un ordre "naturel" que la base de données utilise. Si vous voulez un ordre spécifique vous devez soit ajouter une clause Order By qui utilisera une méthode de notation que vous créez ou vous devez les commander dans le programme qui reçoit les enregistrements.

(. Je dois deviner que les autres documents que vous tirez contiennent également les critères de recherche, juste plus loin dans le champ de texte)

Voir ici pour un exemple d'utilisation Rank pour commander vos dossiers: SQL Server Freetext match - how do I sort by relevance Le La colonne Rank est générée par l'appel de correspondance de texte.

+0

On ne peut pas trier les enregistrements sur la base de la pertinence avec mot clé recherché ?? – Prashant

+0

J'ai ajouté un lien vers une question précédente qui montre l'utilisation de Rank. – Godeke

Questions connexes