【问题标题】:Postgresql full text search tokenizerPostgresql 全文搜索分词器
【发布时间】:2013-08-08 08:44:27
【问题描述】:

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

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

'На' 是一个停用词,应该被删除,但它甚至不会在结果向量中小写。如果我传递小写字符串,一切正常

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

当然我可以传递预先小写的字符串,但是手册说

简单的字典模板通过转换输入标记来操作 小写并对照停用词文件进行检查。

配置russian_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;

但我实际上使用内置 russian 配置得到完全相同的结果。

正如我所料,我尝试了 ts_debug 和被视为 word 的令牌。

有什么想法吗?

【问题讨论】:

    标签: postgresql full-text-search tokenize


    【解决方案1】:

    问题解决了。原因是数据库是使用默认 ("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';
    

    现在可以重新创建数据库和简单字典了。

    【讨论】:

      猜你喜欢
      • 2018-12-07
      • 2015-06-15
      • 2021-07-28
      • 1970-01-01
      • 2011-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多