Я хочу использовать PostgreSQL 9.5.4 на AWS RDS, используя полнотекстовый поиск, словари со стоп-словами, безударный полнотекстовый поиск.На AWS RDS Postgres, как есть словари и безударный полнотекстовый поиск?
Контекст:
С 'unaccent' на, это полный текст (JSON) запрос будет найти 'F (E-острый) vrier', даже если не был введен акцент правильно
psql>select * from proto_model.product where to_tsvector((body ->> 'description')) @@ to_tsquery('Fevrier');
С помощью английского словаря поиск того же «для», «любого», «вы» ... не найдет ничего, поскольку они будут «останавливать слова», определенные в английском словаре, и игнорируются.
Вопрос:
На моей местной Postgres, это не проблема вообще. На управляемом AWS это одно. EC2 + Docker на AWS не будет проблемой, конечно, но сейчас я сосредотачиваюсь на RDS Postgres.
Локально значением по умолчанию default_text_search_config (получить его с psql>show all
) является «pg_catalog.english», который использует английский словарь и останавливает слова. В RDS это «pg_catalog.simple».
1) В AWS я не могу добавить словарь или изменить его, поскольку вам нужен доступ к файловой системе, которого у вас нет. Программного решения для создания/обновления словаря AFAIK нет.
2) В АМС, так как пользователей, к которым «Postgres» или даже как «rds_superuser», который вы можете create, я не могу изменить глобальную конфигурацию
psql>ALTER SYSTEM SET default_text_search_config = 'pg_catalog.english';
ERROR: must be superuser to execute ALTER SYSTEM command
Кроме того, отсутствует РДС Postgres группы параметров, которые вы можете связать с новым экземпляром 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) К сожалению, в АМС, как '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», я могу создать новую конфигурацию поиска (английский + Unaccent), но я не могу установить его по умолчанию, даже в моей сессии!
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 + Докер , знаете ли вы какое-либо решение для (4) или (5) предоставления мне словаря + unaccent?
Благодаря
Оливье