在AWS RDS Postgres上,如何使用字典和无重音全文搜索? [英] On AWS RDS Postgres, how to have dictionaries and unaccented full-text search?

查看:18
本文介绍了在AWS RDS Postgres上,如何使用字典和无重音全文搜索?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在AWS RDS上使用PostgreSQL 9.5.4,利用全文搜索、带停用词的词典、无重音全文搜索。

上下文:

启用‘unaccent’时,即使我没有正确输入重音,此全文(Json)查询也会找到‘F(e-急性)vrier’

psql>select * from proto_model.product where to_tsvector((body ->> 'description')) @@ to_tsquery('Fevrier');

在英语词典中,同样搜索‘the’,‘any’,‘you’.将找不到任何内容,因为它们在英语词典中定义为"停用词",并被忽略。

问题:

在我当地的Postgres上,这根本不是问题。在托管AWS上,这就是其中之一。 当然,AWS上的EC2+Docker不是问题,但我目前主要关注RDS Postgres。

在本地,default_text_search_config(通过psql>show all获取)的默认值是‘pg_Catalog.english’,它使用英语词典和停用单词。在RDS上,这是"pg_Catalog.Simple"。

1)在AWS中,我无法添加或修改字典,因为您需要您没有的文件系统访问权限。没有用于创建/更新词典AFAIK的编程解决方案。

2)在AWS中,作为‘postgres’用户,甚至作为您可以create的‘rds_superuser’,我不能更改全局配置

psql>ALTER SYSTEM SET default_text_search_config = 'pg_catalog.english';
ERROR:  must be superuser to execute ALTER SYSTEM command
此外,它缺少可以与新Postgres实例关联的RDS Postgres参数组,并且不能添加缺少的值! 向‘rds_superuser’(psql>grant all on schema public to ...)授予更多权限无济于事。

3)在AWS中,作为‘postgres’或‘rds_superuser’,我可以为我的会话设置当前文本配置

psql>set default_text_search_config = 'pg_catalog.english'; 
SET
4)遗憾的是,在AWS中,作为‘postgres’或‘rds_superuser’,我无法更改搜索配置(全局)以忽略重音。这在本地运行得很好。

psql>ALTER TEXT SEARCH CONFIGURATION english ALTER MAPPING FOR hword, hword_part, word WITH unaccent, english_stem;
ERROR:  must be owner of text search configuration english

5)在AWS中,作为‘postgres’或‘rds_superuser’,我可以创建新的搜索配置(英语+非重音),但即使在我的会话中也不能将其设置为默认值!

psql>CREATE TEXT SEARCH CONFIGURATION english2 (copy=english);
CREATE...
psql>ALTER TEXT SEARCH CONFIGURATION english2 ALTER MAPPING FOR hword, hword_part, word WITH unaccent, english_stem;
ALTER...
psql>set default_text_search_config = 'pg_catalog.english2';
ERROR:  invalid value for parameter "default_text_search_config": "pg_catalog.english2"

所以我好像被煮熟了。

我所能看到的最佳效果可能是自动关联,而不需要单独psql>set default_text_search_config = ...我的用户连接到一组配置选项

psql>alter role somerole set default_text_search_config = 'pg_catalog.english';
psql>select * from pg_user; (the option is present by default for all my connections under this role)

除了从AWS RDS迁移到EC2+Docker之外,您是否知道(4)或(5)为我提供字典+不重音的解决方案?

推荐答案

您可以通过更改数据库中的角色参数进行更改,如下所示:

ALTER ROLE [role] IN DATABASE [database]
    SET default_text_search_config TO 'pg_catalog.english';

这篇关于在AWS RDS Postgres上,如何使用字典和无重音全文搜索?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆