萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> sql server教程 >> 在SQL Server 2005中用存儲過程實現搜索功能

在SQL Server 2005中用存儲過程實現搜索功能

   現在很多網站都提供了站內的搜索功能,有的很簡單在SQL語句裡加一個條件如:where names like ‘%words%’就可以實現最基本的搜索了。

 

   我們來看看功能強大一點,復雜一點的搜索是如何實現的(在SQL SERVER200/2005通過存儲過程實現搜索算法)。

 

   我們把用戶的搜索可以分為以下兩種:

   1.精確搜索,就是把用戶輸入的各個詞語當成一個整體,不分割搜索.

   2.像百度,GOOGLE一樣的,按空格把輸入的每一個詞分離,只要包含這些詞語,而不管出現的順序,稱為ALL-Word Search.

   3.對輸入的詞只要有一個出現就為匹配 稱為Any-Word Search


一、對搜索結果進行排序的算法

   在前面提到的LIKE語句最大的問題就是搜索的結果是沒有經過排序的,我們不知道結果出現在的順序是如何的,因為它是隨機的。像百度,GOOGLE都會對結果用算法進行排序再顯示的.好我們也來建立一個簡單的排序法。一個很常見的算法是計算關鍵詞在被搜索內容中出現的次數,次數最多的排在結果的第一位。我們的是在存儲過程中實現這個算法的,而在SQLSERVER中沒有提供計算關鍵詞在被搜索內容中出現的次數這樣的函數,我們要自己寫一個UDF(User-Defined Functions),UDF是SQLSERVER的內部函數,可以被存儲過程調用或者被其他UDF調用。函數如下:

 

 1CREATE FUNCTION dbo.WordCount
 2
 3(@Word VARCHAR(15), 
 4
 5@Phrase VARCHAR(1000))
 6
 7RETURNS SMALLINT
 8
 9AS
10
11BEGIN
12
13/**//* 如果@Word 或者@Phrase 為空返回 0 */
14
15IF @Word IS NULL OR @Phrase IS NULL RETURN 0
16
17/**//* @BiggerWord 比@Word長一個字符 */
18
19DECLARE @BiggerWord VARCHAR(21)
20
21SELECT @BiggerWord = @Word + 'x'
22
23/**//*在 @Phrase用@BiggerWord替換@Word */
24
25DECLARE @BiggerPhrase VARCHAR(2000)
26
27SELECT @BiggerPhrase = REPLACE (@Phrase, @Word, @BiggerWord)
28
29/**//* 相減結果就是出現的次數了 */
30
31RETURN LEN(@BiggerPhrase) - LEN(@Phrase)
32
copyright © 萬盛學電腦網 all rights reserved