O pg_jieba é uma extensão de terceiros e código aberto para busca de texto completo em chinês.
Pré-requisitos
O PolarDB for PostgreSQL oferece suporte às seguintes versões:
PostgreSQL 15 (versão secundária do mecanismo 15.7.2.0 ou posterior)
PostgreSQL 14 (versão secundária do mecanismo 14.5.2.0 ou posterior)
PostgreSQL 11 (versão secundária do mecanismo 1.1.28 ou posterior)
Execute a instrução a seguir para visualizar a versão secundária do mecanismo do seu cluster PolarDB for PostgreSQL:
-
PostgreSQL 15 e PostgreSQL 14
SELECT version(); -
PostgreSQL 11
SHOW polar_version;
Introdução
A extensão pg_jieba fornece as seguintes configurações de busca de texto:
jiebacfg: Modo preciso. Divide o texto com precisão, sem gerar palavras redundantes.
jiebaqry: Modo completo. Verifica todas as possíveis palavras correspondentes no texto, podendo produzir termos redundantes.
jiebacfg_pos: Modo preciso com posição. Adiciona informações de índice de posição aos resultados do modo preciso. Também exibe stop words, ignoradas no modo preciso por aparecerem com muita frequência e não serem úteis nas buscas.
Uso
Instale ou desinstalar a extensão
Somente contas privilegiadas podem executar comandos para instalar ou desinstalar a extensão.
-
Instale a extensão:
CREATE EXTENSION pg_jieba; -
Desinstale a extensão:
DROP EXTENSION pg_jieba;
Exemplos
Exemplo 1
-
Use a configuração do modo preciso jiebacfg:
SELECT * FROM to_tsvector('jiebacfg', 'Xiaoming, a master''s graduate from the Institute of Computing Technology, Chinese Academy of Sciences, later pursued advanced studies at Kyoto University in Japan');Resultado retornado:
to_tsvector ---------------------------------------------------------------------------------- 'Chinese Academy of Sciences':5 'Xiaoming':1 'Kyoto University':10 'graduate':3 'advanced studies':11 'master''s':2 'Institute of Computing Technology':6 (1 row) -
Use a configuração do modo completo jiebaqry:
SELECT * FROM to_tsvector('jiebaqry', 'Xiaoming, a master''s graduate from the Institute of Computing Technology, Chinese Academy of Sciences, later pursued advanced studies at Kyoto University in Japan');Resultado retornado:
to_tsvector ----------------------------------------------------------------------------------------------------------------------------------------------------------------- 'China':5 'Chinese Academy of Sciences':9 'Kyoto':16 'University':17 'Academy':7 'Xiaoming':1 'Japan':15 'Kyoto University':18 'graduate':3 'advanced studies':19 'master''s':2 'Science':6 'Academy of Sciences':8 'Computing':10 'Institute of Computing Technology':11 (1 row) -
Use a configuração do modo preciso com posição jiebacfg_pos:
SELECT * FROM to_tsvector('jiebacfg_pos', 'Xiaoming, a master''s graduate from the Institute of Computing Technology, Chinese Academy of Sciences, later pursued advanced studies at Kyoto University in Japan');Resultado retornado:
to_tsvector ------------------------------------------------------------------------------------------------------------------------------------------ 'Chinese Academy of Sciences:7':5 'from:6':4 'later:16':8 'at:17':9 'Xiaoming:0':1 'Kyoto University:18':10 'graduate:4':3 'advanced studies:24':11 'master''s:2':2 'Institute of Computing Technology:12':6 ',:15':7 (1 row)
Exemplo 2
-
Use a configuração do modo preciso jiebacfg:
SELECT * FROM to_tsvector('jiebacfg', 'Li Xiaofu is the director of the innovation office and an expert in the cloud computing field');Resultado retornado:
to_tsvector ------------------------------------------------------------------- 'expert':11 'director':5 'cloud computing':8 'innovation':3 'office':4 'field':9 'Li Xiaofu':1 (1 row) -
Use a configuração do modo completo jiebaqry:
SELECT * FROM to_tsvector('jiebaqry', 'Li Xiaofu is the director of the innovation office and an expert in the cloud computing field');Resultado retornado:
to_tsvector ----------------------------------------------------------------------------- 'expert':12 'director':5 'cloud computing':9 'innovation':3 'office':4 'field':10 'Li Xiaofu':1 'computing':8 (1 row) -
Use a configuração do modo preciso com posição jiebacfg_pos:
SELECT * FROM to_tsvector('jiebacfg_pos', 'Li Xiaofu is the director of the innovation office and an expert in the cloud computing field');Resultado retornado:
to_tsvector --------------------------------------------------------------------------------------------------------------------------- 'expert:17':11 'director:7':5 'also:9':6 'cloud computing:11':8 'innovation:4':3 'office:6':4 'field:14':9 'is:10':7 'is:3':2 'Li Xiaofu:0':1 'of:16':10 (1 row)
Recursos estendidos
O pg_jieba permite configure e alternar entre vários dicionários personalizados.
Para usar o recurso de dicionário personalizado, adicione pg_jieba ao parâmetro shared_preload_libraries. Defina esse parâmetro no console. Para mais informações, consulte Set cluster parameters. Como a modificação desse parâmetro reinicia o cluster, planeje suas operações adequadamente e proceda com cautela.
-
Insira dados no dicionário 0. Por padrão, o dicionário 0 é utilizado e possui peso 10.
INSERT INTO jieba_user_dict VALUES ('Alibaba Cloud'); INSERT INTO jieba_user_dict VALUES ('R&D engineer',0,10); -
Tokenize o texto usando o dicionário Jieba padrão.
SELECT * FROM to_tsvector('jiebacfg', 'zth is an R&D engineer at Alibaba Cloud');Resultado retornado:
to_tsvector ------------------------------------------------------ 'zth':1 'an':6 'Cloud':4 'engineer':8 'R&D':7 'Ali':3 (1 row) -
Alterne para o dicionário personalizado 0.
SELECT jieba_load_user_dict(0);Resultado retornado:
jieba_load_user_dict ---------------------- (1 row) -
Tokenize o texto usando o dicionário 0.
SELECT * FROM to_tsvector('jiebacfg', 'zth is an R&D engineer at Alibaba Cloud');Resultado retornado:
to_tsvector -------------------------------------------- 'zth':1 'an':5 'R&D engineer':6 'Alibaba Cloud':3 (1 row)