使用 SQL 全文查询和 MSIDXS 查询在搜索中忽略短划线“-”

本文可帮助你解决在 SQL Server 字符数据上执行全文搜索时出现的问题,或者将 SQL 分布式查询与 Microsoft Index Server OLE DB 访问接口 (MSIDXS) 和前缀扩展搜索(例如,XYZ-A*)结合使用时。

适用范围:SQL Server
原始 KB 数: 200043

现象

在 SQL Server 字符数据上执行全文搜索时,或者将 SQL 分布式查询与 Microsoft Index Server OLE DB 访问接口(MSIDXS)和前缀扩展搜索用于包含连字符(例如“XYZ-A*”)的复合词时,生成的结果可能不如预期。

原因

全文搜索将单词视为不含空格或标点符号的字符串。 非字母数字字符的出现可以在搜索期间中断单词。 由于 SQL Server 全文搜索是基于单词的引擎,因此通常不考虑标点符号,在搜索索引时将被忽略。 因此,类似子CONTAINS句的行与值匹配,找不到我的计算机会很昂贵CONTAINS(testing, "computer-failure")

解决方法

若要解决此问题,请尝试以下方法之一:

  • 仅当使用 SQL Server 全文索引设施时,才使用字母数字字符。

  • 如果非字母数字字符必须在搜索条件(主要是短划线-字符)中使用,请使用 Transact-SQL LIKE 子句而不是FULLTEXTCONTAINS谓词。

详细信息

Microsoft SQL Server 版本 7.0 提供对 SQL Server 表中存储的字符数据执行全文查询的功能。 还可以将 SQL 分布式查询与 MSIDXS 提供程序配合使用来搜索文件系统数据。 不支持在邻近搜索中使用短划线(-),可能会产生意外的结果。

参考

  • 有关 SQL Server 全文搜索的详细信息,请参阅 SQL Server 联机丛书。

  • 有关在 Microsoft Index Server (MSIDXS) 提供程序中使用 CONTAINS 子句的详细信息,请参阅 Windows NT 4.0 选项包文档中的 Index Server 文档。