Os dicionários personalizados permitem controlar a segmentação de texto em índices full-text no AnalyticDB for MySQL. Use-os para manter termos específicos do domínio intactos (entidades) ou excluir palavras irrelevantes de alta frequência (stop words). O fluxo de trabalho envolve três etapas: criar uma tabela de dicionário, adicionar entradas e associar o dicionário a um índice full-text.
Pré-requisitos
Antes de começar, verifique se você tem:
Permissões DDL e DML no dicionário personalizado (necessárias para criá-lo ou atualizá-lo)
Permissão SELECT no dicionário personalizado (necessária para usá-lo em consultas)
Visão geral
Um dicionário personalizado é uma tabela com duas colunas fixas: value (a palavra) e type (entidade ou stop word). Como funciona como uma tabela padrão, gerencie-o com as mesmas operações SQL: INSERT para adicionar palavras e DELETE para removê-las. As alterações entram em vigor imediatamente; todos os dados gravados posteriormente nas tabelas indexadas usam o dicionário atualizado na segmentação.
Dois tipos de palavra controlam o comportamento da tokenização:
main: marca um termo como entidade que o tokenizador não deve dividir. Use esta opção para termos específicos do domínio que a tokenização padrão fragmentaria, como nomes de locais e organizações em contextos gerais, ou marcas, produtos e modelos em cenários de e-commerce.stop: marca um termo para exclusão do índice. Recomendado para palavras de alta frequência sem valor de busca, comofromem cenários de log de auditoria SQL.
As stop words exigem o AnalyticDB for MySQL V3.1.4.24 ou posterior. Para verificar a versão do cluster, faça login no console do AnalyticDB for MySQL e acesse a seção Configuration Information na página Cluster Information. Para atualizar, consulte Atualizar a versão secundária de um cluster.
Limites
O sistema não oferece suporte a alterações DDL em dicionários personalizados.
Não há suporte para operações UPDATE e TRUNCATE em dicionários personalizados.
Use o dicionário personalizado obrigatoriamente com um índice full-text.
Exclua o dicionário personalizado associado antes de excluir um índice full-text.
Cada cluster suporta um dicionário personalizado por padrão. Entre em contato com o suporte técnico para criar dicionários adicionais.
Cada dicionário aceita até 10.000 entradas por padrão. Solicite ao suporte técnico o aumento desse limite, se necessário.
Criar um dicionário personalizado
Sintaxe
CREATE TABLE [IF NOT EXISTS] table_name (
`value` VARCHAR NOT NULL COMMENT 'column_comment',
`type` VARCHAR NOT NULL [DEFAULT 'main|stop' COMMENT 'column_comment'],
PRIMARY KEY (`value`, `type`)
) COMMENT 'table_comment'
FULLTEXT_DICT = 'Y',
INDEX_ALL = 'Y|N'
Restrições
O dicionário personalizado pode conter apenas as colunas
valueetype.Ambas as colunas são do tipo VARCHAR e não podem estar vazias.
A chave primária deve incluir
valueetype.
Parâmetros
|
Parâmetro |
Descrição |
|
|
Nome da tabela de dicionário. Deve ter de 1 a 127 caracteres e pode conter letras, dígitos e sublinhados ( |
|
|
Armazena a palavra. O nome da coluna é fixo: |
|
|
Armazena o tipo da palavra. O nome da coluna é fixo: |
|
|
Comentário da coluna ou tabela. |
|
|
Marca a tabela como tabela de dicionário. Defina como |
|
|
Especifica as colunas indexadas. |
INDEX_ALL e mecanismos de tabela:
A configuração correta de INDEX_ALL depende do mecanismo de tabela do cluster:
Clusters anteriores à versão V3.2.2.0 usam o mecanismo XUANWU. O valor padrão de
INDEX_ALLéY. Mantenha o valor padrão.-
Clusters V3.2.2.0 ou posteriores podem usar o XUANWU_V2. Execute a instrução a seguir para verificar:
SHOW ADB_CONFIG KEY=RC_DDL_ENGINE_REWRITE_XUANWUV2;Se o resultado for
true, o mecanismo padrão é XUANWU_V2 eINDEX_ALLassume o valor padrãoN. Defina explicitamenteINDEX_ALL = 'Y'ao criar tabelas de dicionário nesses clusters; caso contrário, a operação falhará. Se o resultado forfalsee você não definir explicitamente o mecanismo da tabela como XUANWU_V2, o mecanismo de tabela padrão será XUANWU.
Exemplo
Crie uma tabela de dicionário chamada tbl_dict_name:
CREATE TABLE tbl_dict_name (
`value` VARCHAR NOT NULL COMMENT 'value of an entity or a stop word',
`type` VARCHAR NOT NULL [DEFAULT 'main' COMMENT 'main: entity (not segmented); stop: excluded from index (V3.1.4.24+)'],
PRIMARY KEY (`value`, `type`)
) COMMENT = 'your dictionary table'
FULLTEXT_DICT = 'Y',
INDEX_ALL = 'Y';
Atualizar um dicionário personalizado
As operações INSERT e DELETE entram em vigor imediatamente. Os dados gravados após a atualização usam as entradas mais recentes do dicionário na segmentação.
Exemplos
Adicione uma stop word:
INSERT INTO `tbl_dict_name` (`value`, `type`) VALUES ('and', 'stop');
Remova uma palavra:
DELETE FROM `tbl_dict_name` WHERE `value` = 'and' AND `type` = 'stop';
Usar um dicionário personalizado
Especifique o dicionário ao criar um índice full-text em uma instrução CREATE TABLE ou ALTER TABLE.
Sintaxe
FULLTEXT INDEX idx_name(`column_name`) [ WITH ANALYZER analyzer_name ] [ WITH DICT tbl_dict_name];
Parâmetros
|
Parâmetro |
Descrição |
|
|
Nome do índice full-text. |
|
|
Coluna na qual criar o índice full-text. |
|
|
(Opcional) Analisador a ser usado. Para analisadores compatíveis, consulte Analisadores para índices full-text. |
|
|
Dicionário personalizado a aplicar. |
Exemplo
Adicione um índice full-text na coluna content de tbl_fulltext_demo, usando o analisador AliNLP e o dicionário tbl_ext_dict:
ALTER TABLE `tbl_fulltext_demo`
ADD FULLTEXT INDEX fidx_c(`content`)
WITH ANALYZER alinlp
WITH DICT `tbl_ext_dict`;