什么是搜索SQL查询的最佳实践?

时间:2009-07-01 10:23:46

标签: vb.net linq sql-server-2008

我有一个SQL 2008 Express数据库,它有以下表格:

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查询来搜索针对这些表的单词(即Beyonce Halo Music Video)。

哪些视频有:

  • 对于标题,确切的短语将获得0.5分
  • 对于描述,精确短语将获得0.4分
  • 对于标签,精确短语将获得0.3分
  • 对于标题,所有单词将获得0.2分
  • 描述所有单词将获得0.2分
  • 对于标题,一个或多个单词将获得0.1分
  • 为了描述,一个或多个单词将获得0.1分

我将根据观点展示这些视频。这将是什么SQL查询? LINQ查询会更好。

如果您知道更好的方法,请提供帮助。

2 个答案:

答案 0 :(得分:1)

据我所知,SQL Server的全文功能不适用于多语言列和表。

我也在处理项目的类似情况;我还没有找到任何解决方案。

我也使用类似于Mladen的方法。我的速度有点慢,但我总结了这些分数;而不是switch-case方法:

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子句中使用like运算符非常昂贵。因此,在我看来,选择所有并稍后订购可能会更好。

答案 1 :(得分: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%