为啥 SQL Server 全文搜索不匹配数字?

Posted

技术标签:

【中文标题】为啥 SQL Server 全文搜索不匹配数字?【英文标题】:Why is SQL Server full-text search not matching numbers?为什么 SQL Server 全文搜索不匹配数字? 【发布时间】:2014-09-04 13:20:12 【问题描述】:

我使用的是 SQL Server 2014 Express,并在表上设置了全文索引。

全文索引仅索引单个列,在此示例中名为 foo

表格中有 3 行。该全文索引列的 3 行中的值是这样的......

test 1
test 2
test 3 test 1

上面的每个新行都是表格中的一个新行,该文本实际上就是全文索引列中的内容。因此,使用 SQL Server 的 CONTAINS 函数,如果我执行以下查询,我会按预期将所有行作为匹配项返回。

SELECT * FROM example WHERE CONTAINS(foo, 'test')

但是,如果我运行以下查询,我也会将所有行作为匹配项返回,这是我没想到的。在以下查询中,我只希望有一行作为匹配项。

SELECT * FROM example WHERE CONTAINS(foo, '"test 3"')

最后,简单地搜索“3”不会返回任何匹配的行,这也是我没想到的。我希望从以下查询中有一个匹配的行,但没有得到。

SELECT * FROM example WHERE CONTAINS(foo, '3')

我已经阅读了关于 CONTAINS 和全文索引的 MSDN 页面,但我无法弄清楚这种行为。我一定是做错了什么。

谁能向我解释发生了什么以及如何执行我所描述的搜索?

【问题讨论】:

我怀疑数字是停用词 - 未编入索引。 我怀疑停用词应该归咎于太短或经常使用。***.com/questions/12759042/… 啊,是的,它是停用词。谢谢你的链接。 【参考方案1】:

虽然这可能不是 答案,但它解决了我最初的问题。我的全文索引使用的是系统停止列表。无论出于何种原因,某些单独的数字(例如“测试 1”中的“1”)都被跳过了,或者不管停止列表做了什么。

以下问题和答案(此处为 SO)建议一起禁用停止列表。我这样做了,现在我的全文搜索符合我的预期,但代价是更大的全文索引。

Full text search does not work if stop word is included even though stop word list is empty

【讨论】:

以上是关于为啥 SQL Server 全文搜索不匹配数字?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server - 基于百分比的全文搜索

使用联接的 SQL Server 全文搜索无法按预期工作

多词包含全文搜索仅在 SQL Server 中部分工作

SQL Server性能优化运用SQL Server的全文检索来提高模糊匹配的效率

SQL Server 全文搜索

Sql Server 数据库建全文搜索