SQL Server全文搜索中的Contains子句省略了一些匹配的行

时间:2015-10-16 16:55:15

标签: full-text-search sql-server-2014 sql-like

我在SQL Server 2014数据库中有一个名为Products的表。此表中的列ProductName具有常规非聚集索引以及其上的全文索引。 当我运行下面的查询时,全文搜索查询省略了LIKE子句包含的一些行。

问题:为什么前两个全文查询没有显示LIKE查询返回的产品?我的目标是查找名称中包含i2的产品。

SELECT p.ProductId, p.ProductName FROM Products p WHERE contains(p.ProductName, N'i2');
SELECT p.ProductId, p.ProductName FROM Products p WHERE freetext(p.ProductName, N'i2');
SELECT p.ProductId, p.ProductName  FROM Products p WHERE p.ProductName LIKE '%i2%';

我从这些查询中看到的结果如下面的屏幕截图所示。

Results of Full Text Search Vs LIKE Query in SQL Server 2014

1 个答案:

答案 0 :(得分:2)

这是由于全文搜索的工作方式,它与工作方式不同,因为它不是简单的模式匹配,它是语言识别的,实际上是在寻找单词,因此为什么它找到了行用"字" i2在其中,但不是那个(id 352)与" word"例如id21。

如果您想使用全文搜索,您可以执行前缀搜索,您可以在其中搜索以i2开头的单词,如下所示:

SELECT p.ProductId, p.ProductName FROM Products p WHERE contains(p.ProductName, N'"i2*"');

请注意,您无法在N'"*i2*"'N'"*i2"'等单词的中间或末尾搜索i2,因为在这种情况下,asterix会被忽略为标准标点符号,并且不会被视为通配符。< / p>