我在Windows Server 2003 R2上使用SQL Server 2008 R2作为文章数据库。我有一个具有该文章名称的字段。以下是一些例子:
当我使用以下sql-command
时SELECT Name FROM Articles WHERE CONTAINS(Name, '"NYM-J 3X1,5"');
我希望只返回NYM- J 3X1,5的文章,但返回上述所有以及NYM- O 的文章。那么我做错了什么?
谢谢!
答案 0 :(得分: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
但是具有不同的{ {1}})。因此,两个搜索词都是相同的,因为FTS认为“nym”,“nymj”和“nymo”在全文搜索中是等价的。
由于关于FTS解析器的文档很少,很难说解决方案可能是什么,尽管最明显的一点是,因为您需要精确匹配,所以可以使用phrase_id
。全文搜索真正用于使用单词和短语搜索自然语言文本,它不是通用文本解析器。