2008-11-17 119 views
1

目前,我有一個存儲過程,其主要目標是通過電影和電視節目的數據庫表進行全文搜索。爲了讓它做部分關鍵字搜索,我在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專家,我覺得我只是人爲地處理了上面的代碼以使其工作。我有一種感覺,有一個更優雅或強大的解決方案,我還沒有找到它。

預先感謝您

回答

1

一些經過研究,我將嘗試使用Lucene.Net我的電影片尾字幕搜索引擎,而不是依靠全文在SQL Server 2005年初搜索測試表明,結果與Lucene更好,更相關。一種「蝙蝠俠」的搜索將返回下面的部分結果集:

  • 蝙蝠俠
  • 蝙蝠俠
  • 蝙蝠俠歸來
  • 蝙蝠俠與羅賓:蝙蝠俠接管
  • 以遠蝙蝠俠:淡淡箭毒
  • 以遠蝙蝠俠:巴貝爾
  • 蝙蝠俠:賽季02
  • 蝙蝠俠:亂七八糟的
  • 蝙蝠俠與羅賓:恐怖
  • 的隧道
  • 以遠蝙蝠俠[動畫電視連續劇]
  • 蝙蝠俠新的冒險:詛咒!再次上油!
  • 蝙蝠俠新冒險:這看起來像蝙蝠蟎的工作!
0

我想你會發現SQL Server Full Text的工作原理一樣好,但你必須瞭解如何構建關鍵字。它與Lucene不一樣,特別是在索引方面。我想你會發現SQL Server在可伸縮性和功能方面會更好 - 尤其是SQL 2008現在它是引擎的一部分。

+0

您可能對SQL 2008有所瞭解,因爲我還沒有使用它,但到目前爲止,Lucene已經給我提供了更好的結果和靈活性,而且時間更少。 – Carl 2008-12-03 14:51:13