2015-10-16 62 views
0

我在SQL Server 2014數據庫中有一個名爲Products的表。該表中的列ProductName具有常規的非聚集索引以及全文索引。 當我運行下面的查詢時,全文搜索查詢省略了LIKE子句包含的一些行。SQL Server全文搜索中的Contains子句省略了一些匹配行

問題:爲什麼前兩個全文查詢不能調出由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

這是由於的方式,全文檢索的作品,它是像作品的方式不同的是沒有做簡單的模式匹配是語言感知和實際尋找的話,因此爲什麼它找到例如,其中包含「單詞」i2的行,但不包含具有「單詞」id21的那一行(id 352)。

,如果你想使用全文搜索,你可以做的是執行前綴搜索,在那裏你可以搜索與i2開始的話,像這樣:

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

請注意,您無法搜索I2在N'"*i2*"'N'"*i2"'之類的詞的中間或末尾,因爲在這種情況下asterix被忽略爲標準標點符號,並且不被視爲通配符。