2009-04-28 43 views
1

我有一個用戶可以輸入術語的搜索框。我有一個在字符串列上進行全文搜索的表設置。讓我們說一個用戶輸入:「word,office,microsoft」並點擊「搜索」。Asp.net全文多重搜索術語方法

這是處理多個搜索字詞的最佳方式嗎?

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

有沒有辦法在sql中包含搜索條件而不是迭代?我試圖減少對sql服務器的調用量。

回答

2

FREETEXT可能適合你。它會根據單詞邊界將字符串分隔成單獨的單詞(單詞分解)。然後你只會有一個SQL調用。

MSDN -- FREETEXT

+0

自由文本(sqlcolumn, '爲test1,TEST3')似乎把工作做好。謝謝! – Paulj 2009-04-28 17:16:07

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可能是可行的。

0

你可以做到這一點類似於你有什麼有:只是解析基於分隔符的搜索條件,然後讓每一個電話,加盟在一起的結果。或者,您可以執行多個CONTAINS:

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

也許試試看看你的環境中哪個更快。