我有一个搜索框,用户可以输入术语。我有一个表格设置,在字符串列上搜索全文。让我们说用户输入:“word,office,microsoft”并点击“搜索”。
这是处理多个搜索字词的最佳方式吗?
(pseudocode)
foreach (string searchWord in searchTerms){
select col1 from myTable where contains(fts_column, ‘searchWord’)
}
有没有办法在sql中包含搜索词而不是迭代?我正在尝试减少对sql server的调用量。
答案 0 :(得分:2)
FREETEXT可能适合您。它会根据单词边界(断字)将字符串分成单个单词。然后你只有一个SQL调用。
答案 1 :(得分:0)
您可以动态构建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注入等的常见警告/免责声明...... 但是主要是您将动态构建所有子句并在一个查询中应用它们。
根据您与数据库的交互方式,将整个非拆分搜索词传递给SPROC然后拆分&可能是可行的。在存储过程中构建动态SQL。
答案 2 :(得分:0)
你可以这样做:你只需要根据分隔符解析搜索术语,然后对每个分词进行调用,将结果连接在一起。或者,您可以执行多个CONTAINS:
SELECT Name FROM Products WHERE CONTAINS(Name, @Param1) OR CONTAINS(Name, @Param2) etc.
也许尝试两者,看看哪种环境更快。
答案 3 :(得分:0)