【问题标题】:How to construct a full-text search predicate for SQL Server 2008如何为 SQL Server 2008 构建全文搜索谓词
【发布时间】:2012-07-06 21:57:44
【问题描述】:

我想在全文列中搜索以下两个词:

2011
J Vineyards

我在哪里构造谓词

"2011*" and "j vineyards*"

不返回任何行。

应该匹配的记录是

2011 j vineyards viognier alexander valley united states

经过实验,似乎与单个“j”字符有关。

编辑:

这是全文列 BeverageSearchData 的选择语句。

Declare @test nvarchar(100);
Set @test='""2011*" and "j vineyards*"';
Select * from bv_beverage WHERE CONTAINS (BeverageSearchData,@test)

【问题讨论】:

    标签: sql-server full-text-search


    【解决方案1】:

    这里有几种可能性。完整的查询而不仅仅是谓词将帮助您获得更好的答案。

    可能正在发生的一件事是,SQL 全文搜索在构建其索引时会消除单个字符(如 J 中的)。

    如果使用CONTAINS,您可能需要更改干扰文件并重新启动 SQL Server 全文搜索服务。

    如果使用LIKE,您可以尝试添加一个额外的单字符通配符。用它玩一下,看看它在没有 2011 的情况下是否可以工作,然后重新添加。

    WHERE myColumn like 'j_vineyards%'
    WHERE myColumn like 'j%vineyards%'
    

    另外需要注意的是CONTAINS 不支持前导通配符。

    【讨论】:

      【解决方案2】:

      您正在寻找%,而不是*

      试试这个:

      "%2011%" and "%j vineyards%"
      

      【讨论】:

      • 为什么 "%2011%" 和 "%j%" 不返回任何行?
      【解决方案3】:

      您在创建索引时选择了哪种语言?默认情况下,SQL Server 在creating an index 时关联系统全文停止列表,这可能是您的情况。

      尝试像这样使用 STOPLIST OFF 构建索引 -

      CREATE FULLTEXT INDEX on [table]([column]) ON [catalog] WITH STOPLIST OFF;
      

      或者,您可以modify the stoplists 排除某些单词,例如上面示例中的“j”。

      【讨论】:

        猜你喜欢
        • 2015-02-05
        • 2011-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-19
        • 2010-10-04
        相关资源
        最近更新 更多