現在很多網站都提供了站內的搜索功能,有的很簡單在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