我正在使用SQL Server 2014 Express,并且在表上有全文索引设置。
全文索引仅索引单个列,在本示例中名为foo。
foo
该表中有3行。全文索引列的3行中的值如下所示…
test 1 test 2 test 3 test 1
上面的每一行都是表中的新行,而该文本实际上就是全文索引列中的内容。因此,使用SQL Server的CONTAINS功能,如果执行以下查询,则可以按预期将所有行返回为匹配项。
CONTAINS
SELECT * FROM example WHERE CONTAINS(foo, 'test')
但是,如果我运行以下查询,我也将所有行都作为匹配项返回,这是我所不希望的。在以下查询中,我只希望将一行作为匹配项。
SELECT * FROM example WHERE CONTAINS(foo, '"test 3"')
最后,仅搜索“ 3”不会返回任何匹配的行,这也是我所没有想到的。我希望从下面的查询中找到一个匹配的行,但是什么也没有。
SELECT * FROM example WHERE CONTAINS(foo, '3')
我已经阅读了MSDN页面CONTAINS和全文索引,但是我无法弄清楚这种现象。我一定做错了什么。
有人可以向我解释发生了什么以及如何执行我描述的搜索吗?
虽然这可能不是 的 答案,它解决了我原来的问题。我的全文索引正在使用系统停止列表。出于某种原因,某些单独的数字(例如“测试1”中的“ 1”)将被跳过,或者停止列表会执行任何操作。
以下关于SO的问题和答案建议一起禁用停止列表。我这样做了,现在我的全文本搜索符合我的期望,但看起来却像一个更大的全文本索引。
即使停用词列表为空,如果包含停用词,全文搜索也不起作用