Asp.net全文多种搜索术语方法论

时间:2009-04-28 16:28:33

标签: 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中包含搜索词而不是迭代?我正在尝试减少对sql server的调用量。

4 个答案:

答案 0 :(得分:2)

FREETEXT可能适合您。它会根据单词边界(断字)将字符串分成单个单词。然后你只有一个SQL调用。

MSDN -- FREETEXT

答案 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)

相关问题