包含ContainsTable的多列和具有全文索引的布尔逻辑

时间:2009-11-26 02:46:33

标签: sql-server full-text-search

我认为这是一个非常基本的场景,但我读到的内容使得使用SQL Server全文目录和索引并不容易。

我有2列,名字和姓氏。我想支持对他们进行全文搜索,这样如果有人输入“约翰史密斯”,那么两者匹配的人首先出现,最后出现。

尽管跨多个列创建索引很容易,并且很容易搜索多个列,但评分并不能反映多个列。

SELECT [Key], Rank 
FROM CONTAINSTABLE([User], (FirstName,LastName), '<CLAUSE_HERE>')
  1. 如果CLAUSE_HERE是“john smith”,我没有得到任何结果,因为这两个字段都不存在。
  2. 如果它是“john OR smith”,我会在任一字段中为所有用户提供任一名称,并按无助的顺序排序。
  3. 如果是“john AND smith”,我没有结果,因为两个字段都不包含这两个字。
  4. 似乎唯一的解决方案是自动生成在每个字段上运行containstable的查询,进行一些数学运算,对分数求和等等。听起来是否合适?有更简单的方法吗?我的实际查询有很多字段 - 这是一个简化的例子。

2 个答案:

答案 0 :(得分:11)

制作一个computed column,将您感兴趣搜索的字段(以对您的搜索格式有意义的方式)和全文索引组合在一起。

据我所知,由于你在问题中描述的行为,如果你想以这种方式全文,这是唯一的解决方法。

答案 1 :(得分:0)

您需要对其进行测试,但我想知道您是否可以使用ISABOUT()函数对每个关键字应用权重。您的搜索条款可能类似于:

ISABOUT(john weight(0.2), smith weight(0.8))