我刚开始免费搜索,所以请原谅新手的问题。假设我有以下全文索引:
Create FullText Index on Contacts(
FirstName,
LastName,
Organization
)
Key Index PK_Contacts_ContactID
Go我想对连在一起的所有三列进行一个自由文本搜索。
FirstName + ' ' + LastName + ' ' + Organization所以,例如
搜索Smith
jim smith返回所有名为Jim 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但这显然是在执行smith OR ibm;它返回了许多不在IBM工作的史密斯,反之亦然。令人惊讶的是,搜索smith AND ibm会产生相同的结果。
这做我想做的..。
Select c.FirstName, c.LastName, c.Organization
from Contacts c
where Contains(*, 'smith') and Contains(*, 'ibm')然后,我不能将来自用户的查询参数化--我必须自己把搜索字符串分解成单词,然后动态地组装...but,这是丑陋和不安全的。
发布于 2009-11-30 15:09:06
我通常采用的方法是创建一个搜索视图或计算列(使用触发器),将所有这些值放到一个字段中。
我做的另一件事是使用全文搜索引擎,比如Lucene/Solr。
https://stackoverflow.com/questions/1820215
复制相似问题