【问题标题】:sql server full text search strange search resultsql server全文搜索奇怪的搜索结果
【发布时间】:2013-05-08 09:27:41
【问题描述】:

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

  • NYM-J 3X1,5 格劳环 100 m
  • NYM-O 3X1,5 格劳滚筒
  • NYM-O 3X1,5 格劳环 100 m
  • NYM-J 3X1,5 grau Ring 50 m
  • NYM-J 3X1,5 grau Trommel 500 m
  • INSTALLATIONSLEITUNG NYM-J 3X1,5

当我使用以下 sql 命令时

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

我希望只有带有 NYM-J 3X1,5 的文章会被退回,但以上所有带有 NYM-O 的文章也会被退回。那我做错了什么?

谢谢!

【问题讨论】:

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


    【解决方案1】:

    您可以使用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。全文搜索实际上是用于使用单词和短语搜索自然语言文本,它不是通用的文本解析器。

    【讨论】:

      猜你喜欢
      • 2013-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-20
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      • 2020-05-20
      相关资源
      最近更新 更多