【问题标题】:How to do a FREETEXTTABLE across multiple multiple columns and multiple terms with ranking?如何跨多个列和多个术语进行 FREETEXTTABLE 排名?
【发布时间】:2011-07-11 14:18:48
【问题描述】:

我有一个这样的客户表:

身份证*, 标题, 名, 中间名, 姓, 公司名称

所有字符串字段都可以为空。

我需要能够为用户提供模糊搜索。因此,例如,他们可以输入以下搜索并返回排名结果:

“鲍勃” “鲍勃·琼斯” “鲍勃·乔恩*” “琼斯先生” “鲍勃·戴夫·琼斯” “B D 琼斯” “鲍勃·琼斯 ACME 公司” “ACME 公司” “ACME 鲍勃” 等等

我的问题是似乎没有办法进行通配符/LIKE% 匹配。所以如果有姓“JONESY”,搜索“JONES”是不匹配的。

在理想情况下,我想将所有字符串列连接到一个列中,然后对其进行模糊搜索,因为排名会更好。

谁能告诉我如何进行通配符搜索或搜索连接字段?

谢谢,

西蒙。

【问题讨论】:

    标签: sql-server full-text-search


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      我也在做这种搜索。这是帮助我的链接

      http://www.codeproject.com/KB/database/SQLServer2K8FullTextSearh.aspx

      【讨论】:

        猜你喜欢
        • 2017-10-06
        • 2012-07-29
        • 1970-01-01
        • 1970-01-01
        • 2015-05-24
        • 2011-03-12
        • 2012-12-03
        • 2018-03-24
        • 2019-02-04
        相关资源
        最近更新 更多