我有一个这样的客户表:
ID *, 标题, 名字, 中间名, 姓, 公司名称
所有字符串字段都可以为空。
我需要能够为用户提供模糊搜索。因此,例如,他们可以输入以下搜索结果,它会带回排名结果:
“BOB” “BOB JONES” “BOB JON *” “JONES先生” “BOB DAVE JONES” “B D JONES” “BOB JONES ACME CORP” “ACME CORP” “ACME BOB” 等
我的问题是似乎没有办法做通配符/ LIKE%匹配。因此,如果有一个姓氏“JONESY”,搜索“JONES”就不匹配了。
在一个理想的世界中,我想将所有字符串列连接到一列,然后对其进行模糊搜索,因为排名会更好。
有人可以告诉我如何进行通配符搜索或搜索CONCATENATED字段吗?
谢谢,
西蒙。
答案 0 :(得分:1)
您可以在表中的多个列上定义SQL Server全文索引。
对这样的表进行全文查询可以指定查询列,也可以一次查询所有列。
全文搜索不支持真正的通配符匹配,但它支持前缀匹配。这意味着您可以搜索“JONES *”,它将匹配“JONESON”或“JONESY”。
使用FREETEXTTABLE将为您的结果提供排名。
“JONES”的前缀匹配如下所示:
SELECT
t.QueryContent
, ft.[Key]
, ft.[Rank]
FROM
Table t
LEFT OUTER JOIN CONTAINSTABLE ( Table , * , '"JONES*"' ) ft ON ( t.TableID = ft.[Key] )
ORDER BY
ft.Rank DESC
, t.QueryContent
答案 1 :(得分:0)
http://www.codeproject.com/KB/database/SQLServer2K8FullTextSearh.aspx