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
- 搜索
将返回在ibm工作的所有名为smith的联系人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
但这显然是在做史密斯或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字段,并对其编制索引。