2013-05-08 198 views
0

我在Windows Server 2003 R2上使用SQL Server 2008 R2作爲文章數據庫。我有一個與該文章的名稱字段。下面是一些例子:sql server全文搜索奇怪的搜索結果

  • NYM-J 3X1,5 GRAU環百米
  • NYM-O 3X1,5 GRAU轉篩
  • NYM-O 3X1,5 GRAU環百米
  • NYM- Ĵ3X1,5 GRAU環50米
  • NYM-J 3X1,5 GRAU轉篩500米
  • INSTALLATIONSLEITUNG NYM-J 3X1,5

當我使用跟隨着摹SQL命令

SELECT Name FROM Articles WHERE CONTAINS(Name, '"NYM-J 3X1,5"'); 

我想到只用NYM- Ĵ 3X1,5的文章將被返回,但返回的上方,還的所有文章,NYM- Ø。那麼,我做錯了什麼?

謝謝!

回答

0

您可以使用sys.dm_fts_parser解析兩個字符串:

select * from sys.dm_fts_parser('"NYM-J 3X1,5"', 1033, 0, 0) 
select * from sys.dm_fts_parser('"NYM-O 3X1,5"', 1033, 0, 0) 

解釋結果是有點尷尬,因爲文檔不包括所有的細節(例如,什麼是零phrase_id是什麼意思?) 。但我最好的理解是,FTS解析器已經將「nym」標識爲匹配,並且「nymo」和「nymj」都被認爲是「nym」的替代形式(因爲它們具有相同的group_id但是不同的phrase_id)。因此,兩個搜索詞都是相同的,因爲FTS認爲「nym」,「nymj」和「nymo」對於全文搜索的目的是等同的。

由於關於FTS解析器的文檔很少,很難說什麼解決方案可能是,但最明顯的是,因爲您想要精確匹配,您可以使用LIKE。全文搜索實際上是用於使用單詞和短語來搜索自然語言文本,它不是一個通用的文本解析器。