Asp.net全文多搜索词方法

Asp.net全文多搜索词方法,asp.net,sql,full-text-search,Asp.net,Sql,Full Text Search,我有一个搜索框,用户可以在其中输入术语。我有一个在字符串列上进行全文搜索的表格设置。假设用户键入“word、office、microsoft”并单击“搜索” 这是处理多个搜索词的最佳方法吗 (pseudocode) foreach (string searchWord in searchTerms){ select col1 from myTable where contains(fts_column, ‘searchWord’) } 有没有一种方法可以在sql中包含搜索词而不

我有一个搜索框,用户可以在其中输入术语。我有一个在字符串列上进行全文搜索的表格设置。假设用户键入“word、office、microsoft”并单击“搜索”

这是处理多个搜索词的最佳方法吗

(pseudocode)
foreach (string searchWord in searchTerms){    
    select col1 from myTable where contains(fts_column, ‘searchWord’)
}

有没有一种方法可以在sql中包含搜索词而不进行迭代?我正在尝试减少对sql server的调用量。

您可以动态构建sql查询

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...
显然,这是关于SQL注入等的常见警告/免责声明。但原则是,您将动态构建所有子句,并在一个查询中应用它们


根据您与数据库的交互方式,您可以将整个未拆分的搜索项传递到存储过程中,然后在存储过程中拆分并构建动态SQL。

FREETEXT可能适合您。它将根据单词边界(分词)将字符串分隔为单个单词。那么您就只有一个SQL调用了


您可以执行类似的操作:只需根据分隔符解析搜索词,然后对每个词进行调用,将结果合并在一起。或者,您可以执行多个包含操作:

SELECT Name FROM Products WHERE CONTAINS(Name, @Param1) OR CONTAINS(Name, @Param2) etc.
也许可以同时尝试这两种方法,看看哪一种在您的环境中更快。

我使用这个类来处理freetext(sqlcolumn,'test1,test3')以完成任务。谢谢