我在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%';
我从这些查询中看到的结果如下面的屏幕截图所示。
答案 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>