我正在使用一款使用 PostgreSQL 作为数据库的应用程序,它使用扩展unaccent
来规范化文本。我想通过修改unaccent.rules
文件来改进其搜索功能。
我编辑/usr/share/postgresql/16/tsearch_data/unaccent.rules
并添加了一些阿拉伯语 Unicode 块的规则(U+0600
至U+06ff
):
۰ 0
۱ 1
۲ 2
۳ 3
۴ 4
۵ 5
۶ 6
۷ 7
۸ 8
۹ 9
َ
并且运行良好。
SELECT unaccent('سَلام ۱۳۲');
unaccent
----------
سلام 123
(1 row)
问题 1:
问题出在零宽度非连接符(ZWNJ- U+200C
),应该用空格(U+0020
)代替。
سَلامعلیکم
->سلام علیکم
我尝试过的:
我尝试了以下行,但是不起作用或者给出错误:
"" " "
:(invalid syntax: more than two strings in unaccent rule
警告)+它不起作用。 " "
:(invalid syntax: more than two strings in unaccent rule
警告)+它不起作用。\u200C \u0020
:由ChatGPT建议,但是没有起作用。\u200C " "
:由ChatGPT建议,但是没有起作用。
注1:
上面的前两行中,有一个不可见的 ZWNJ 字符,在 VIM 中显示为 <200c>,但在本文中看不到。
注2:
我没有同时添加所有这些行,而是逐一尝试。
注3:
没有其他关于 ZWNJ 的规则
unaccent.rules
问题2:
有没有办法添加新规则文件而不是编辑默认文件?我无法编辑应用程序源代码并更改查询。
添加类似/usr/share/postgresql/16/tsearch_data/arabic.stop
或/usr/share/postgresql/16/tsearch_data/arabic.rules
重新启动服务是否可以使 PostgreSQL 理解它?
是否需要运行一些查询来重新加载文件?
是否需要改变应用程序请求搜索的方式?