【问题标题】:Use multiple words in FullText Search input string在全文搜索输入字符串中使用多个单词
【发布时间】:2010-08-09 15:51:27
【问题描述】:

我有一个基本的存储过程,它通过传入@Keyword 参数对表中的 3 列执行全文搜索。它用一个词效果很好,但是当我尝试输入多个词时它会掉下来。我不确定为什么。错误说:

全文搜索条件“这是一个搜索项”中“搜索项”附近的语法错误

SELECT     S.[SeriesID], 
           S.[Name] as 'SeriesName',
           P.[PackageID],
           P.[Name]     
FROM       [Series] S
INNER JOIN [PackageSeries] PS ON S.[SeriesID] = PS.[PackageID]
INNER JOIN [Package]       P  ON PS.[PackageID] = P.[PackageID]
WHERE CONTAINS ((S.[Name],S.[Description], S.[Keywords]),@Keywords)
AND   (S.[IsActive] = 1) AND (P.[IsActive] = 1) 
ORDER BY [Name] ASC

【问题讨论】:

    标签: tsql sql-server-2008 full-text-search


    【解决方案1】:

    在将 @Keyword 参数传递到 SQL 语句之前,您必须对其进行一些预处理。 SQL 期望关键字搜索将由布尔逻辑分隔或用引号括起来。因此,如果您要搜索该短语,则必须用引号括起来:

    SET @Keyword = '"this is a search item"'
    

    如果你想搜索所有的词,那么你需要类似的东西

    SET @Keyword = '"this" AND "is" AND "a" AND "search" AND "item"'
    

    有关详细信息,请参阅T-SQL CONTAINS syntax,特别是查看示例部分。

    作为附加说明,请务必替换双引号字符(用空格),以免弄乱全文查询。有关如何执行此操作的详细信息,请参阅此问题:SQL Server Full Text Search Escape Characters?

    【讨论】:

    • 谢谢。不知道为什么我查看的 MSDN 文档没有这个简单但非常常见的示例。
    • @Aaron 如果使用 MATCH 而不是 CONTAINS,这 AND 运算符是否有效?因为我没有得到任何带有 MATCH 条件的 AND 输出
    • 我们如何搜索包含“的短语?我们是否放双“”或语法是什么?
    【解决方案2】:

    进一步 Aaron 的回答,如果您使用的是 SQL Server 2016 或更高版本 (130),您可以使用内置的字符串函数来预处理您的输入字符串。例如

    SELECT
        @QueryString = ISNULL(STRING_AGG('"' + value + '*"', ' AND '), '""')
    FROM
        STRING_SPLIT(@Keywords, ' ');
    

    这将产生一个查询字符串,您可以将其传递给CONTAINSFREETEXT,如下所示:

    '"this*" AND "is*" AND "a*" AND "search*" AND "item*"'
    

    或者,当@Keywords 为空时:

    ""
    

    【讨论】:

      猜你喜欢
      • 2015-07-25
      • 2015-08-20
      • 2015-04-01
      • 2013-09-15
      • 2013-10-22
      • 2011-12-27
      • 2022-01-02
      • 1970-01-01
      相关资源
      最近更新 更多