2009-07-01 79 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子句中使用类似的运算符是非常非常昂贵的。所以,在我看来,选择全部并稍后订购可能会更好。