Todos os produtos
Search
Central de documentação

PolarDB:pg_jieba (tokenização de chinês)

Última atualização: Jul 14, 2026

A busca textual integrada do PostgreSQL oferece suporte a idiomas baseados em alfabeto, mas não tokeniza texto em chinês. A extensão pg_jieba resolve essa limitação ao segmentar o texto chinês em lexemas pesquisáveis, o que viabiliza a busca textual para conteúdo em chinês no PolarDB for PostgreSQL.

Versões compatíveis

A extensão pg_jieba está disponível em clusters do PolarDB for PostgreSQL que executam:

  • PostgreSQL 15 (versão de revisão 15.7.2.0 ou posterior)

  • PostgreSQL 14 (versão de revisão 14.5.2.0 ou posterior)

  • PostgreSQL 11 (versão de revisão 1.1.28 ou posterior)

Para verificar sua versão de revisão atual:

  • PostgreSQL 15 e 14:

    SELECT version();
  • PostgreSQL 11:

    SHOW polar_version;

Como funciona

O pg_jieba oferece três configurações de busca textual. Cada uma aplica uma estratégia diferente de tokenização, adequada a cenários específicos de pesquisa:

Configuração

Modo

Mais indicado para

jiebacfg

Modo exato

Indexação. Divide o texto no conjunto mais preciso de termos, sem subpalavras redundantes.

jiebaqry

Modo completo

Maximizar o recall nas consultas. Extrai todas as combinações possíveis de palavras, incluindo subpalavras.

jiebacfg_pos

Modo exato com posição

Quando são necessárias as posições de deslocamento de caracteres para cada token. Inclui também stop words que o modo exato remove.

Como escolher entre o modo exato e o modo completo: Utilize jiebacfg na maioria dos cenários de indexação textual, pois retorna menos tokens e com maior precisão. Prefira jiebaqry quando perder um resultado de busca for mais crítico do que filtrar ruído; esse modo retorna todas as subpalavras possíveis, melhorando o recall ao custo de possíveis correspondências duplicadas.

Ativar e desativar a extensão

Nota

Somente contas privilegiadas podem executar essas instruções.

Para criar a extensão pg_jieba:

CREATE EXTENSION pg_jieba;

Para removê-la:

DROP EXTENSION pg_jieba;

Tokenizar texto em chinês

Todas as três configurações funcionam com a função padrão to_tsvector. O nome da configuração é o primeiro argumento.

Exemplo 1 — Entrada: '小明硕士毕业于中国科学院计算所,后在日本京都大学深造'

Modo exato (jiebacfg):

SELECT * FROM to_tsvector('jiebacfg', '小明硕士毕业于中国科学院计算所,后在日本京都大学深造');
                        to_tsvector
----------------------------------------------------------------------------------
 '中国科学院':5 '小明':1 '日本京都大学':10 '毕业':3 '深造':11 '硕士':2 '计算所':6
(1 row)

Modo completo (jiebaqry) — retorna mais tokens, incluindo subpalavras como '中国', '学院' e '科学':

SELECT * FROM to_tsvector('jiebaqry', '小明硕士毕业于中国科学院计算所,后在日本京都大学深造');
                                  to_tsvector
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
 '中国':5 '中国科学院':9 '京都':16 '大学':17 '学院':7 '小明':1 '日本':15 '日本京都大学':18 '毕业':3 '深造':19 '硕士':2 '科学':6 '科学院':8 '计算':10 '计算所':11
(1 row)

Modo exato com posição (jiebacfg_pos) — inclui deslocamentos de caracteres e stop words como '于', '后' e '在':

SELECT * FROM to_tsvector('jiebacfg_pos', '小明硕士毕业于中国科学院计算所,后在日本京都大学深造');
                                       to_tsvector
------------------------------------------------------------------------------------------------------------------------------------------
 '中国科学院:7':5 '于:6':4 '后:16':8 '在:17':9 '小明:0':1 '日本京都大学:18':10 '毕业:4':3 '深造:24':11 '硕士:2':2 '计算所:12':6 ',:15':7
(1 row)

Exemplo 2 — Entrada: '李小福是创新办主任也是云计算方面的专家'

Modo exato (jiebacfg):

SELECT * FROM to_tsvector('jiebacfg', '李小福是创新办主任也是云计算方面的专家');
                    to_tsvector
-------------------------------------------------------------------
 '专家':11 '主任':5 '云计算':8 '创新':3 '办':4 '方面':9 '李小福':1
(1 row)

Modo completo (jiebaqry) — também retorna '计算' como subpalavra de '云计算':

SELECT * FROM to_tsvector('jiebaqry', '李小福是创新办主任也是云计算方面的专家');
                          to_tsvector
-----------------------------------------------------------------------------
 '专家':12 '主任':5 '云计算':9 '创新':3 '办':4 '方面':10 '李小福':1 '计算':8
(1 row)

Modo exato com posição (jiebacfg_pos) — inclui stop words como '是', '也' e '的' com seus respectivos deslocamentos:

SELECT * FROM to_tsvector('jiebacfg_pos', '李小福是创新办主任也是云计算方面的专家');
                                              to_tsvector
---------------------------------------------------------------------------------------------------------------------------
 '专家:17':11 '主任:7':5 '也:9':6 '云计算:11':8 '创新:4':3 '办:6':4 '方面:14':9 '是:10':7 '是:3':2 '李小福:0':1 '的:16':10
(1 row)

Usar dicionários personalizados

O pg_jieba aceita múltiplos dicionários personalizados. Carregue termos específicos do seu domínio em um dicionário personalizado para melhorar a precisão da segmentação do seu conteúdo.

Importante

Antes de usar dicionários personalizados, adicione pg_jieba ao parâmetro shared_preload_libraries. Configure esse parâmetro no console — consulte Configurar parâmetros do cluster. O cluster reinicia após você salvar essa alteração.

O exemplo a seguir demonstra como os termos de um dicionário personalizado alteram os resultados da segmentação. Sem o dicionário personalizado, '阿里云' e '研发工程师' são divididos em subpalavras. Após carregar o dicionário personalizado, eles passam a ser tratados como tokens únicos.

  1. Insira termos no primeiro dicionário personalizado (índice 0, peso 10):

    INSERT INTO jieba_user_dict VALUES ('阿里云');
    INSERT INTO jieba_user_dict VALUES ('研发工程师', 0, 10);
  2. Verifique a segmentação com o dicionário integrado. Neste momento, o dicionário personalizado ainda não está ativo:

    SELECT * FROM to_tsvector('jiebacfg', 'zth是阿里云的一个研发工程师');
                    to_tsvector
    ------------------------------------------------------
     'zth':1 '一个':6 '云':4 '工程师':8 '研发':7 '阿里':3
    (1 row)

    Observe que '阿里云' foi dividido em '阿里' e '云', enquanto '研发工程师' foi dividido em '研发' e '工程师'.

  3. Mude para o dicionário personalizado 0:

    SELECT jieba_load_user_dict(0);
     jieba_load_user_dict
    ----------------------
    
    (1 row)
  4. Execute a mesma consulta novamente. Os termos personalizados agora são reconhecidos como tokens únicos:

    SELECT * FROM to_tsvector('jiebacfg', 'zth是阿里云的一个研发工程师');
                    to_tsvector
    --------------------------------------------
     'zth':1 '一个':5 '研发工程师':6 '阿里云':3
    (1 row)

Próximos passos