sql server全文搜索奇怪的搜索结果
问题描述:
我在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- Ø。那么,我做错了什么?
谢谢!
答
您可以使用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
。全文搜索实际上是用于使用单词和短语来搜索自然语言文本,它不是一个通用的文本解析器。