只是遇到了一个问题。我正在尝试设置本地化内容的全文搜索(尤其是俄语)。问题是默认配置(以及我的自定义配置)不处理字母大小写。例子:

SELECT * from to_tsvector('test_russian', 'На рынке появились новые рублевые облигации');
> 'На':1 'новые':4 'облигации':6 'появились':3 'рублевые':5 'рынке':2

“bonа”是一个停止字,应该删除,但它在结果向量中甚至不小写。如果我传递小写字符串,所有操作都正常
SELECT * from to_tsvector('test_russian', 'на рынке появились новые рублевые облигации');
> 'новые':4 'облигации':6 'появились':3 'рублевые':5 'рынке':2

当然我可以传递小写的字符串,但是手册上说
简单字典模板通过转换输入令牌来操作
降低大小写并将其与停止字文件进行核对。
Configrussian_test如下所示:
create text search CONFIGURATION test_russian (COPY = 'russian');

CREATE TEXT SEARCH DICTIONARY russian_simple (
    TEMPLATE = pg_catalog.simple,
    STOPWORDS = russian
);

CREATE TEXT SEARCH DICTIONARY russian_snowball (
    TEMPLATE = snowball,
    Language = russian,
    StopWords = russian
);

alter text search configuration test_russian
    alter mapping for word
    with russian_simple,russian_snowball;

但我实际上得到了与内置配置完全相同的结果。
我尝试了ts_调试,并按预期将标记处理为russian
有什么想法吗?

最佳答案

问题解决了。原因是数据库是用默认的(“C”)CTypeCollate启动的。
我们曾经

initdb --locale=UTF-8 --lc-collate=UTF-8 --encoding=UTF-8 -U pgsql *PGSQL DATA DIR*

重新创建实例和
CREATE DATABASE "scratch"
  WITH OWNER "postgres"
  ENCODING 'UTF8'
  LC_COLLATE = 'ru_RU.UTF-8'
  LC_CTYPE = 'ru_RU.UTF-8';

重新创建db和simple dictionary现在可以工作了。

08-28 02:43