目前,我有一個存儲過程,其主要目標是通過電影和電視節目的數據庫表進行全文搜索。爲了讓它做部分關鍵字搜索,我在SQL中添加了一些代碼,用空格分割搜索查詢,並輸出如下語句:部分關鍵字搜索(MS SQL 2005)
'「batman *」〜「be *」'
例如,可以從用戶輸入的頁面上的文本框生成原始字符串「batman be」,並且在每個javascript keyup事件中,我將該文本框中的任何內容發送到存儲的proc以獲得結果在我輸入時獲得結果(如自動完成)。在這種情況下,用戶可能一直在尋找「蝙蝠俠開始」或「蝙蝠俠:蝙蝠女郎開始」(電視劇集),並且他們都應該出現。
下面是我的查詢示例。 @partialKeywordString在上面的例子中是''batman *「〜」be *「'。
SELECT f.title
FROM Films f INNER JOIN
CONTAINSTABLE(Films, Title, @partialKeywordString) f_key ON f.filmid = f_key.[key]
ORDER BY f_key.Rank DESC
我在查詢中遇到的問題是,排名似乎並不完全符合我的預期。如果我只是想搜索「蝙蝠俠」,人們會相信所有以「蝙蝠俠」開頭或僅包含「蝙蝠俠」這個單詞的電影將首先出現。但他們沒有。 當一個搜索只是「蝙蝠俠」會發生什麼樣的結果是如下:
「蝙蝠俠:動畫系列 - 集114」 「蝙蝠俠和羅賓的冒險 - 集218」 「蝙蝠俠與羅賓 - 集101" ‘蝙蝠俠 - 集101’ ‘蝙蝠俠與羅賓 - 集204’
大部分進一步下跌的名單是電影,我正在尋找 - ‘蝙蝠俠:開戰時刻’,甚至只是‘蝙蝠俠’。
我正在尋找關於如何調整此查詢的建議 - 我絕對不是SQL專家,我覺得我只是人爲地處理了上面的代碼以使其工作。我有一種感覺,有一個更優雅或強大的解決方案,我還沒有找到它。
預先感謝您
您可能對SQL 2008有所瞭解,因爲我還沒有使用它,但到目前爲止,Lucene已經給我提供了更好的結果和靈活性,而且時間更少。 – Carl 2008-12-03 14:51:13