我需要了解如何在 SQL Server 2014 或更高版本中使用全文搜索来搜索日语文本
I need to find out how I can search Japanese text using Full-Text search in SQL Server 2014 or later
我认为这可能是一个已知的困难,但我正在寻找任何人可能拥有的任何建议、经验或解决方法。
我有一个成熟的 SQL Server 2014 数据库,其中所有字符列都是 nvarchar。我的应用程序是一个 WPF 应用程序 .NET 4.6-+,它可以轻松地以任何语言编写和读取文本,因此从那时起一切都很好。我使用 MS 全文搜索来搜索 nvarchar(max) 列中的文本,这几乎适用于所有语言,我了解它在幕后的工作原理。直到我最近需要搜索不起作用的日语文本。
我正在努力寻找关于这个问题的足够信息,但我发现这些问题很可能与日语文本似乎没有太多的单词边界有关。看起来它的大部分文本都存储在一个大的长字符串中,并连接我们所知道的单词,我明白为什么 SQL 服务器会遇到这种情况。我已经尝试过使用 CONTAINS/CONTAINSTABLE 的“text 来查找 ”' 通配符,但这仍然不起作用。使用 LIKE 是一个选项,但可能有 20,000,000 行是不可能的。
我使用 SQL Server 已经有一段时间了,对它非常了解,尤其是从性能调优的角度来看,所以我肯定不是新手。有没有其他人反对这个,你喜欢这个解决方案吗?当然 SQL 服务器不能简单地将日本排除在外。
Microsoft 实施全文搜索的问题在于它基本上只允许 one language per fulltext index,如果该语言不同于 [的默认语言,则需要在索引定义中指定该语言=22=] 服务器实例。另一个限制是每个 table 或索引视图只能有一个全文索引。
有多种解决方法,具体取决于系统的体系结构和复杂性。例如,您可以创建多个 table,每种语言一个,用于存储索引内容。不幸的是,您的应用程序需要以某种方式 "understand" 哪条记录去哪里,否则您的用户每次输入新数据时都必须设置正确的语言。
或者,所有文本都可以存储在同一个 table 中,但您可以创建多个索引视图,每个视图仅显示一个子集或使用相同语言的记录,然后在这些视图上创建全文索引意见。同样,语言识别的问题依然存在
当然,您的应用程序可以尝试在用户输入文本时检测当前的键盘布局(不确定在 WPF 中是否可行,但我在 WinForms 中这样做了)。如果您的系统存储任何文件,这可能不适用于复制粘贴和上传的文件。
根据我的经验,最可行的解决方案是允许您的客户在安装您的应用程序时自行指定 FTS 语言。如果您的受众是全球性的,您不可能开箱即用地涵盖所有语言。值得庆幸的是,据我所知,无论索引语言如何,搜索英文文本的可靠性都差不多。
我认为这可能是一个已知的困难,但我正在寻找任何人可能拥有的任何建议、经验或解决方法。
我有一个成熟的 SQL Server 2014 数据库,其中所有字符列都是 nvarchar。我的应用程序是一个 WPF 应用程序 .NET 4.6-+,它可以轻松地以任何语言编写和读取文本,因此从那时起一切都很好。我使用 MS 全文搜索来搜索 nvarchar(max) 列中的文本,这几乎适用于所有语言,我了解它在幕后的工作原理。直到我最近需要搜索不起作用的日语文本。
我正在努力寻找关于这个问题的足够信息,但我发现这些问题很可能与日语文本似乎没有太多的单词边界有关。看起来它的大部分文本都存储在一个大的长字符串中,并连接我们所知道的单词,我明白为什么 SQL 服务器会遇到这种情况。我已经尝试过使用 CONTAINS/CONTAINSTABLE 的“text 来查找 ”' 通配符,但这仍然不起作用。使用 LIKE 是一个选项,但可能有 20,000,000 行是不可能的。
我使用 SQL Server 已经有一段时间了,对它非常了解,尤其是从性能调优的角度来看,所以我肯定不是新手。有没有其他人反对这个,你喜欢这个解决方案吗?当然 SQL 服务器不能简单地将日本排除在外。
Microsoft 实施全文搜索的问题在于它基本上只允许 one language per fulltext index,如果该语言不同于 [的默认语言,则需要在索引定义中指定该语言=22=] 服务器实例。另一个限制是每个 table 或索引视图只能有一个全文索引。
有多种解决方法,具体取决于系统的体系结构和复杂性。例如,您可以创建多个 table,每种语言一个,用于存储索引内容。不幸的是,您的应用程序需要以某种方式 "understand" 哪条记录去哪里,否则您的用户每次输入新数据时都必须设置正确的语言。
或者,所有文本都可以存储在同一个 table 中,但您可以创建多个索引视图,每个视图仅显示一个子集或使用相同语言的记录,然后在这些视图上创建全文索引意见。同样,语言识别的问题依然存在
当然,您的应用程序可以尝试在用户输入文本时检测当前的键盘布局(不确定在 WPF 中是否可行,但我在 WinForms 中这样做了)。如果您的系统存储任何文件,这可能不适用于复制粘贴和上传的文件。
根据我的经验,最可行的解决方案是允许您的客户在安装您的应用程序时自行指定 FTS 语言。如果您的受众是全球性的,您不可能开箱即用地涵盖所有语言。值得庆幸的是,据我所知,无论索引语言如何,搜索英文文本的可靠性都差不多。