sql server全文搜索奇怪的搜索结果

时间:2013-05-08 09:27:42

标签: sql-server sql-server-2008-r2 full-text-search

我在Windows Server 2003 R2上使用SQL Server 2008 R2作为文章数据库。我有一个具有该文章名称的字段。以下是一些例子:

  • NYM-J 3X1,5 grau戒指100米
  • NYM-O 3X1,5 grau Trommel
  • NYM-O 3X1,5 grau戒指100米
  • NYM-J 3X1,5 grau戒指50米
  • NYM-J 3X1,5 grau Trommel 500 m
  • INSTALLATIONSLEITUNG NYM-J 3X1,5

当我使用以下sql-command

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

我希望只返回NYM- J 3X1,5的文章,但返回上述所有以及NYM- O 的文章。那么我做错了什么?

谢谢!

1 个答案:

答案 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。全文搜索真正用于使用单词和短语搜索自然语言文本,它不是通用文本解析器。