2009-07-01 71 views
0

我有一個SQL 2008 Express數據庫,其中有如下表:什麼是搜索SQL查詢的最佳實踐?

CREATE TABLE Videos 
    (VideoID bigint not null, 
    Title varchar(100) NULL, 
    Description varchar(MAX) NULL, 
    isActive bit NULL ) 

CREATE TABLE Tags 
    (TagID bigint not null, 
    Tag varchar(100) NULL) 

CREATE TABLE VideoTags 
    (VideoID bigint not null, 
    TagID bigint not null) 

現在我需要的SQL查詢搜索詞(即碧昂絲暈音樂視頻)對這些表。

哪些視頻:

  • 對於標題精確短語將得到0.5分
  • 爲了說明確切的短語將得到0.4分
  • 標籤爲精確短語將得到0.3分
  • TITLE的所有單詞將得到0.2分
  • 對於說明所有單詞將得到0.2分
  • 對於標題一個或多個單詞將得到0.1分
  • 爲了描述一個或多個單詞將得到0.1分

而且我將展示點的基礎上,這些視頻。什麼是這個SQL查詢? LINQ查詢會更好。

如果你知道更好的方法來實現這一點,請幫助。

+3

你爲什麼不開始你認爲是一個好的解決方案,我們可以給你指點和提示來幫助? – 2009-07-01 10:30:47

回答

0

你應該全文搜索。

除此之外,您可以爲每個表做一個搜索查詢,然後使用一個大小寫的情況。但是這種方法非常笨重,並不是很好。

select case when Title = 'yourPhrase' then 0.5 when Title like '%yourPhrase%' then 0.1 when Title like '%your% %Phrase%' then 0.2 end as Weight 
from yourTable 
where Title like %yourPhrase% 
1

據我所知,SQL Server的全文本功能不適用於多語言的列和表格。

我正在處理一個項目的類似情況;我還找不到任何解決方案。

我也對Mladen使用了類似的方法。我的速度有點慢,但我總結了這些分數;而不是開關盒方法:

select (case when Title = 'yourPhrase' then 0.5 else 0 end) + 
(case when Title like '%yourPhrase%' then 0.1 else 0 end) + 
(case when Title like '%your% %Phrase%' then 0.2 else 0 end) as Weight 
from yourTable 
where <your other filters but not a 'like' operator> 
order by Weight desc 

在where子句中使用類似的運算符是非常非常昂貴的。所以,在我看來,選擇全部並稍後訂購可能會更好。