加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Postgresql全文搜索标记器

发布时间:2020-12-13 18:10:31 所属栏目:百科 来源:网络整理
导读:刚遇到问题.我正在尝试在本地化内容(特别是俄语)上设置全文搜索.问题是默认配置(以及我的自定义)不处理字母案例.例: SELECT * from to_tsvector('test_russian','На рынке появились новые рублевые облигации'); '
刚遇到问题.我正在尝试在本地化内容(特别是俄语)上设置全文搜索.问题是默认配置(以及我的自定义)不处理字母案例.例:
SELECT * from to_tsvector('test_russian','На рынке появились новые рублевые облигации');
> 'На':1 'новые':4 'облигации':6 'появились':3 'рублевые':5 'рынке':2

‘На’是一个禁用词,应该删除,但它甚至不会在结果向量中降低.如果我传递小写字符串,一切正常

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

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

The simple dictionary template operates by converting the input token
to lower case and checking it against a file of stop words.

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

但实际上我使用内置的俄语配置获得了完全相同的结果.

我按照预期尝试将ts_debug和令牌视为单词.

有任何想法吗?

问题解决了.原因是数据库是使用默认(“C”)CType和Collat??e启动的.
我们用了
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';

重新创建数据库和简单字典现在工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读