如何跨多个多列和多个术语进行FREETEXTTABLE排名?

时间:2011-07-11 14:18:49

标签: sql-server full-text-search

我有一个这样的客户表:

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字段吗?

谢谢,

西蒙。

2 个答案:

答案 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