0

我想自定义 SQL Server FTS 以更好地处理特定于语言的功能。

在波斯语和阿拉伯语等许多语言中,有相似的字符在适当的搜索行为中它们应该像这些组一样视为相同的字符:

  • ['آ' , 'ا' , 'ء' , 'ا']
  • ['ي' , 'ی' , 'ئ']

目前我最好的解决方案是将重复数据存储在新列中,并用代表成员替换这些字符,并规范化搜索词并在重复列中执行搜索。

有没有办法告诉 SQL Server 将这些组的任何成员视为相同的字符?

4

1 回答 1

0

据我了解,这将用于建议目的,因此如此准确并不重要。所以在波斯语中,实际上上面列表中的所有字符都没有相同的含义,但我们可以说它们在某些写作案例中确实有一个共享的简短形式('آ' != 'اِ' 但他们都可以写成 'ا' )

场景 1:输入文本为完整形式 想象“محمّد”是格式为 (id int,text nvarchar(12)) 命名为“表”的表中的记录。删除特殊字符后,我们可以使用以下命令:

select * from [db].[dbo].[table] where text REPLACE(text,'ّ','') = REPLACE(N'محمد','ّ','');

结果是

在此处输入图像描述

场景 2:输入为短格式 想象“محمد”是表格中的记录,其格式为 (id int,text nvarchar(12)),命名为 'table'。

在这种情况下,我们需要在数据库中查询之前对文本进行一些逻辑操作
,例如,如果我们知道输入了“محمد”并且有这个特殊字符的列表,那么它应该很容易在查询中搜索为:

select * from [db].[dbo].[table] where REPLACE(text,'ّ','') = 'محمد';

笔记:


这个解决方案并不是一个最好的解决方案,因为输入不应该在客户端受到影响,如果 sql server 配置来处理这个问题会更好。对于不懂波斯语的人,他只想告诉 sql َA =["B","C"] 和 a 在列表中这些字符具有相同的值:当搜索“dad”单词时,如果有任何单词“dbd " 或 "dcd" 也存在返回它们。

添加:

某些字符集有时可能具有相同的含义( ['ي','أ'] 相同,但 ['آ','اِ'] 不同),因此我们得到了第一个场景:

select * from [db].[dbo].[table] 其中文本像 N'%هی[أي]ت' 和文本像 N'هی[أي]ت%';

于 2020-12-08T15:05:39.203 回答