Sql server 跨连接列进行全文搜索?

Sql server 跨连接列进行全文搜索?,sql-server,sql-server-2005,full-text-search,Sql Server,Sql Server 2005,Full Text Search,我是新来的自由文本搜索,所以请原谅我的新手问题。假设我有以下全文索引: Create FullText Index on Contacts( FirstName, LastName, Organization ) Key Index PK_Contacts_ContactID Go 我想对所有连接的三列进行自由文本搜索 FirstName + ' ' + LastName + ' ' + Organization 比如说 搜索jim smith将返回名为jim sm

我是新来的自由文本搜索,所以请原谅我的新手问题。假设我有以下全文索引:

Create FullText Index on Contacts(
    FirstName,
    LastName,
    Organization
)
Key Index PK_Contacts_ContactID
Go
我想对所有连接的三列进行自由文本搜索

FirstName + ' ' + LastName + ' ' + Organization
比如说

  • 搜索
    jim smith
    将返回名为jim smith的所有联系人
  • 搜索
    smith ibm
    将返回在ibm工作的所有名为smith的联系人
这似乎是一种相当普遍的情况。我本以为这会奏效:

Select c.FirstName, c.LastName, c.Organization, ft.Rank
from FreeTextTable(Contacts, *, 'smith ibm') ft
Left Join Contacts c on ft.[Key]=c.ContactID
Order by ft.Rank Desc
但这显然是在做史密斯或ibm的工作;它返回了许多不在IBM工作的史密斯,反之亦然。令人惊讶的是,搜索
smith和ibm
会得到相同的结果

这正是我想要的

Select c.FirstName, c.LastName, c.Organization
from Contacts c 
where Contains(*, 'smith') and Contains(*, 'ibm')

…但是,我不能参数化来自用户的查询--我必须自己将搜索字符串分解成单词,并动态组装SQL,这既丑陋又不安全

我通常采用的方法是创建一个搜索视图或计算列(使用触发器),将所有这些值放入一个字段中


我要做的另一件事是使用全文搜索引擎,比如Lucene/Solr。

布尔运算符只支持CONTAINS,不支持FREETEXT


尝试使用CONTAINSTABLE进行AND查询。

如果我将FREETEXTTABLE替换为CONTAINSTABLE,则不会返回任何结果。我假设这是因为没有一列同时包含“smith”和“ibm”-“smith”在LastName中,“ibm”在Organization中。谢谢-我最终使用计算列/触发器方法填充SearchText字段,并对其编制索引。