2009-04-28 6 views
1

J'ai un champ de recherche dans lequel les utilisateurs peuvent taper des termes. J'ai une configuration de table avec la recherche fulltext sur une colonne de chaîne. Disons qu'un utilisateur tape ceci: "word, office, microsoft" et clique sur "search".Asp.net fulltext termes de recherche multiples méthodologie

Est-ce la meilleure façon de gérer plusieurs termes de recherche? Y at-il un moyen d'inclure les termes de recherche dans le sql et de ne pas itérer? J'essaie de réduire le nombre d'appels au serveur SQL.

Répondre

2

FREETEXT pourrait fonctionner pour vous. Il séparera la chaîne en mots individuels basés sur des limites de mots (rupture de mot). Ensuite, vous n'auriez qu'un seul appel SQL.

MSDN -- FREETEXT

+0

FreeText (SQLColonne, 'test1, test3') semble faire le travail. Merci! – Paulj

0

Eh bien, vous pouvez simplement construire votre requête SQL ... Dynamiquement

string [] searchWords = searchTerm.Split(","); 

string SQL = "SELECT col1 FROM myTable WHERE 1=2"; 

foreach (string word in searchWords) 
{ 
    SQL = string.Format("{0} OR contains(fts_column, '{1}')", SQL, word); 
} 

//EXEC SQL... 

Il est évident que cela vient avec les avertissements habituels/avertissements sur l'injection SQL, etc ... mais le principal est que vous construire dynamiquement toutes vos clauses et appliquez-les en une seule requête. En fonction de la manière dont vous interagissez avec votre base de données, il est possible de passer le terme de recherche non divisé dans un SPROC, puis de diviser le code SQL dynamique & à l'intérieur de la procédure stockée.

0

Vous pouvez le faire semblable à ce que vous avez là: il suffit d'analyser les termes de recherche basés sur delimiter, puis faire un appel sur chacun, joignant les résultats ensemble. Alternativement, vous pouvez faire plusieurs CONTAINS:

SELECT Name FROM Products WHERE CONTAINS(Name, @Param1) OR CONTAINS(Name, @Param2) etc. 

Peut-être essayer les deux et voir ce qui est plus rapide dans votre environnement.

Questions connexes