2013-05-08 131 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。全文搜索实际上是用于使用单词和短语来搜索自然语言文本,它不是一个通用的文本解析器。