跨连接列的全文搜索?

Her*_*ill 5 sql-server full-text-search sql-server-2005

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

Create FullText Index on Contacts(
    FirstName,
    LastName,
    Organization
)
Key Index PK_Contacts_ContactID
Go
Run Code Online (Sandbox Code Playgroud)

我想对连接的所有三列进行自由文本搜索

FirstName + ' ' + LastName + ' ' + Organization
Run Code Online (Sandbox Code Playgroud)

例如,那样

  • 搜索jim smith返回名为Jim Smith的所有联系人
  • 搜索smith ibm返回名为Smith的所有在IBM工作的联系人

这似乎是一种相当普遍的情况.我原以为这会起作用:

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
Run Code Online (Sandbox Code Playgroud)

但这显然是在做smith OR ibm; 它返回了许多不在IBM工作的史密斯,反之亦然.令人惊讶的是,寻找smith AND ibm产量相同的结果.

这就是我想要的......

Select c.FirstName, c.LastName, c.Organization
from Contacts c 
where Contains(*, 'smith') and Contains(*, 'ibm')
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*ght 2

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

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