【问题标题】:How to add a custom dictionary to Microsoft SQL Full Text Search?如何将自定义字典添加到 Microsoft SQL 全文搜索?
【发布时间】:2017-09-07 20:22:03
【问题描述】:

我正在苦苦思索如何让 Microsoft SQL 全文搜索来搜索其中包含断字符的单词,例如 A-123、AB-123 或 ABC-123。开箱即用的英语单词断路器想要在破折号处拆分这些单词。其中带有破折号的单词是已知的集合。我遇到了this article,它讨论了一个可能的解决方案,但我似乎无法让它发挥作用。我正在运行带有 SP 1 的 SQL 2014 Enterprise Edition。我创建了一个包含以下内容的文本文件: A-123 AB-123 ABC-123

然后我使用 exec sp_fulltext_service 'restart_all_fdhosts' 重新启动了全文服务。

然后我通过执行 select [display_term],* from sys.dm_fts_parser('ABC-123', 1033,0,0) 来测试解决方案是否有效。如果工作正常,我希望它返回 1 行(与 abc-123 完全匹配),但它仍然返回 4 行(abc-123、abc、123、nn123)

上一篇文章提到了必须复制的文件和必须更改的设置。我的 Windows 10 工作站只有 NlsData0009.dll 和 NlsLexicons0009.dll(我确实将它们复制到 C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Binn)。 NlsGrammars0009.dlll 不在我的工作站上。感觉这些说明对于 SQL 2008 来说太具体了。

假设我可以让自定义词典工作,那么我需要弄清楚如何将不同的自定义词典应用到每个数据库。有多个数据库的 sql 服务器,每个数据库都需要自己的自定义字典副本。

【问题讨论】:

    标签: sql-server full-text-search


    【解决方案1】:

    您创建的自定义字典文件需要将英文命名为"Custom0009.lex",并放置在以下目录中,其中"C:\Program Files" 是您的SQL 实例的安装路径:

    C:\Program Files\Microsoft SQL Server\<instance>\MSSQL\Binn

    请务必注意您创建的字典文件HAS 是 Unicode 编码的,否则 SQL Server 将直接忽略它。

    对于其他语言,您需要根据本文表2中的语言十六进制代码更改文件名的"0009"部分:Create a custom dictionary

    不幸的是,自定义字典文件在整个 SQL 实例中是通用的,因此每个数据库不可能有不同的文件。这里唯一的解决方案是为每个数据库创建一个实例。

    【讨论】:

      猜你喜欢
      • 2016-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多