如何将自定义词典添加到Microsoft SQL全文搜索?

时间:2017-09-07 20:22:03

标签: sql-server full-text-search

我正在努力解决如何使用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],*来自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 server,每个数据库都需要自己的自定义字典副本。

1 个答案:

答案 0 :(得分:2)

您创建的自定义词典文件需要用英语命名为"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实例中是通用的,因此每个数据库不可能有不同的文件。唯一的解决方案是为每个数据库创建一个实例。