O zhparser é uma extensão do PostgreSQL para busca full-text em chinês. Essa extensão segmenta textos em chinês em palavras, o que permite criar índices full-text e executar consultas textuais em conteúdo nesse idioma no PolarDB for PostgreSQL.
Ative o zhparser
Etapa 1: Instale a extensão e crie uma configuração de busca textual.
CREATE EXTENSION zhparser;
CREATE TEXT SEARCH CONFIGURATION testzhcfg (PARSER = zhparser);
ALTER TEXT SEARCH CONFIGURATION testzhcfg ADD MAPPING FOR n,v,a,i,e,l WITH simple;
Etapa 2: (Opcional) Configure os parâmetros de segmentação.
Defina parâmetros no nível da role para controlar como o zhparser segmenta o texto:
|
Parâmetro |
Padrão |
Descrição |
|
|
|
Combina palavras curtas em segmentos compostos |
Para ativar o multi_short para todas as roles:
ALTER ROLE ALL SET zhparser.multi_short = on;
Etapa 3: Teste o parser.
Execute um teste rápido para verificar se a extensão funciona corretamente:
SELECT * FROM ts_parse('zhparser', 'hello world! 2010年保障房建设在全国范围内获全面启动,从中央到地方纷纷加大了保障房的建设和投入力度。2011年,保障房进入了更大规模的建设阶段。住房城乡建设部党组书记、部长姜伟新去年底在全国住房城乡建设工作会议上表示,要继续推进保障性安居工程建设。');
Verifique o vetor de busca textual e as funções de consulta:
SELECT to_tsvector('testzhcfg', '"今年保障房新开工数量虽然有所下调,但实际的年度在建规模以及竣工规模会超以往年份,相对应的对资金的需求也会创历史纪录。"陈国强说。在他看来,与2011年相比,2012年的保障房建设在资金配套上的压力将更为严峻。');
SELECT to_tsquery('testzhcfg', '保障房资金压力');
Crie um índice full-text
Use um Índice Invertido Generalizado (GIN) para indexar textos em chinês e obter buscas full-text rápidas. O exemplo a seguir cria um índice GIN na coluna name da tabela t1:
-- Create the GIN index
CREATE INDEX idx_t1 ON t1 USING gin (to_tsvector('zhcfg', upper(name)));
-- Query using the index
SELECT * FROM t1 WHERE to_tsvector('zhcfg', upper(t1.name)) @@ to_tsquery('zhcfg', '(防火)');
Personalizar um dicionário de segmentação de palavras em chinês
O dicionário padrão abrange palavras comuns em chinês. Para termos específicos de domínio, como jargões do setor ou nomes de produtos, adicione segmentos de palavras personalizados à tabela pg_ts_custom_word.
Etapa 1: Verifique o resultado atual da segmentação.
SELECT to_tsquery('testzhcfg', '保障房资金压力');
Etapa 2: Adicione o segmento de palavra personalizado.
INSERT INTO pg_ts_custom_word VALUES ('保障房资');
Etapa 3: Sincronize o dicionário e reconecte-se.
SELECT zhprs_sync_dict_xdb();
Após a conclusão da sincronização, feche e reabra a conexão:
\c
Etapa 4: Valide o novo resultado da segmentação.
SELECT to_tsquery('testzhcfg', '保障房资金压力');
Limites
|
Limite |
Valor |
Comportamento quando excedido |
|
Segmentos de palavras personalizados |
1.000.000 |
Segmentos além do limite são ignorados |
|
Tamanho do segmento de palavra |
128 bytes |
Bytes acima de 128 são truncados |
Os dicionários personalizado e padrão permanecem ativos simultaneamente.
Sempre que adicionar, exclua ou atualize segmentos de palavras, execute SELECT zhprs_sync_dict_xdb(); e reconecte-se para aplicar as alterações.