Todos os produtos
Search
Central de documentação

PolarDB:Guia do usuário de índices de texto completo do IMCI

Última atualização: Oct 10, 2026

Este tópico descreve como criar e usar índices de texto completo no In-Memory Column Index (IMCI) do PolarDB for MySQL. Configure um índice invertido usando um COMMENT no nível da coluna para obter recuperação difusa em nível de milissegundos com a sintaxe MATCH...AGAINST ou consultas LIKE otimizadas automaticamente. Esse recurso baseia-se no mecanismo de índice invertido e na correspondência de termos do IMCI. Para obter detalhes sobre seu funcionamento, consulte An analysis of the full-text search feature in IMCI.

Escopo

A versão do seu cluster deve atender aos seguintes requisitos:

  • MySQL 8.0.1, e a versão secundária do mecanismo deve ser 8.0.1.1.52 ou posterior.

  • MySQL 8.0.2, e a versão secundária do mecanismo deve ser 8.0.2.2.32 ou posterior.

Sintaxe

O PolarDB IMCI permite criar, modificar ou excluir um índice invertido ao especificar um comment de coluna durante a criação de uma tabela ou ao modificar o comment de uma coluna por meio de DDL.

Formato da sintaxe

  • Defina um índice de texto completo ao criar uma tabela:

    CREATE TABLE table_name (
        column_name Data_Type COMMENT "imci_fts(type=VALUE [,KEY=VALUE])"
    ) COMMENT 'columnar=1';
  • Use ALTER para modificar uma coluna e adicionar ou modificar um índice:

    ALTER TABLE table_name MODIFY column_name Data_Type COMMENT "imci_fts(type=VALUE [,KEY=VALUE])";
    Importante

    A modificação do COMMENT pode acionar a reconstrução do índice invertido. Em tabelas grandes, execute essa operação em horários de menor movimento.

  • Use ALTER para modificar uma coluna e excluir o índice:

    ALTER TABLE table_name MODIFY column_name Data_Type COMMENT 'imci_fts(enable=0)';

Parâmetros:

No COMMENT no nível da tabela, defina 'columnar=1' para criar uma tabela colunar do IMCI. Configure um índice de texto completo usando o COMMENT da coluna no formato imci_fts(TYPE=VALUE[, KEY=VALUE]...), em que TYPE é obrigatório e KEY é opcional. Separe múltiplas chaves KEY com vírgulas.

  • Tipo de tokenizador (o parâmetro type):

    Tokenizador

    typevalor

    Descrição

    token

    0 (padrão)

    Tokeniza o texto por espaços, pontuação e outros caracteres não alfanuméricos. Adequado para inglês ou texto formatado.

    ngram

    1

    Divide caracteres em segmentos de comprimento fixo (controlado pelo parâmetro len). Adequado para correspondência difusa em qualquer idioma.

    jieba

    2

    Tokenizador de chinês baseado em dicionário. Adequado para pesquisa semântica em chinês.

    ik

    3

    Outro tokenizador de chinês de uso comum.

    json

    4

    Cria um índice a partir do conteúdo extraído de um campo JSON por meio de uma expressão JSONPath (requer o parâmetro expr).

    whole

    5

    Não tokeniza o texto. O valor inteiro da coluna é tratado como um único termo. Usado principalmente para acelerar consultas de igualdade (como = ou IN).

    mysql ngram

    6

    Tokenizador ngram compatível com MySQL.

    Nota

    Este parâmetro se aplica apenas às seguintes versões:

    • MySQL 8.0.1, e a versão secundária do mecanismo deve ser 8.0.1.1.57 ou posterior.

    • MySQL 8.0.2, e a versão secundária do mecanismo deve ser 8.0.2.2.37 ou posterior.

  • Descrição dos parâmetros de configuração (KEY-VALUE):

    Nome do parâmetro (KEY)

    Valor padrão

    Descrição do valor

    Tipos de tokenizador aplicáveis (type)

    enable

    1

    • 1: Cria o índice invertido (padrão)

    • 0: Exclui o índice invertido

    Todos

    type

    0

    Especifica o tipo de tokenizador (consulte a tabela anterior)

    Todos

    len

    -

    Tokenizador ngram: o comprimento da tokenização. Valores válidos: [1, 256)

    type=1 (ngram), type=6 (mysql ngram)

    mode

    0

    Modo do tokenizador:

    • jieba (type=2):

      • 0: Modo exato (padrão)

      • 1: Modo completo

      • 2: Modo de mecanismo de pesquisa

    • ik (type=3):

      • 0: Modo inteligente (padrão)

      • 1: Modo de granularidade mais fina

    • json (type=4):

      • 0: Modo de array legado (padrão)

      • 1: Modo de array

      • 2: Modo chave-valor, por exemplo ".id" e "[].id".

    type=2, 3, 4

    score

    0

    Indica se há suporte para ordenação:

    • 0: Não gera estatísticas de frequência de termo (TF) ou frequência de documento (DF) e ignora a ordenação (padrão)

    • 1: Ativado. Suporta ordenação por pontuação de relevância com base em MATCH... AGAINST.

    Nota

    Este recurso está disponível apenas nas seguintes versões:

    • MySQL 8.0.1, e a versão secundária do mecanismo deve ser 8.0.1.1.57 ou posterior.

    • MySQL 8.0.2, e a versão secundária do mecanismo deve ser 8.0.2.2.37 ou posterior.

    Todos

    seg_size

    0

    Especifica o tamanho do segmento do índice invertido:

    • 0: Usa o valor da variável de sistema imci_fts_build_segment_size

    • Outros valores: especifique um tamanho de segmento específico

    Todos

    pack_cnt_min

    0

    O número mínimo de unidades de dados para criar o índice invertido:

    • 0: Usa o valor da variável de sistema imci_fts_build_packcnt_min

    • Outros valores: especifique um tamanho de segmento específico

    Todos

    pack_cnt_max

    0

    O número máximo de unidades de dados para criar o índice invertido:

    • 0: Usa o valor da variável de sistema imci_fts_build_packcnt_max

    • Outros valores: especifique um tamanho de segmento específico

    Todos

    stop_word

    0

    Especifica se há suporte para palavras de parada:

    • 0: Sem suporte (padrão)

    • 1: Com suporte

    Nota

    Este recurso está disponível apenas nas seguintes versões:

    • MySQL 8.0.1, e a versão secundária do mecanismo deve ser 8.0.1.1.57 ou posterior.

    • MySQL 8.0.2, e a versão secundária do mecanismo deve ser 8.0.2.2.37 ou posterior.

    Todos

    case_sensitive

    0

    Especifica se o índice diferencia maiúsculas de minúsculas:

    • 0: Não diferencia maiúsculas de minúsculas (padrão)

    • 1: Diferencia maiúsculas de minúsculas

    • 2: Determinado pelo collate da coluna (modo compatível com MySQL)

    • 3: Determinado pelo collate da coluna (determinado inteiramente pelo collate)

    Todos

    phrase

    0

    Indica se as informações de posição são registradas para consultas de frase:

    • 0: Não registra informações de posição (padrão)

    • 1: Registra informações de posição

    Nota

    Este parâmetro se aplica apenas às seguintes versões:

    • MySQL 8.0.1, e a versão secundária do mecanismo deve ser 8.0.1.1.57 ou posterior.

    • MySQL 8.0.2, e a versão secundária do mecanismo deve ser 8.0.2.2.37 ou posterior.

    Todos

    synonym

    0

    Especifica se há suporte para sinônimos:

    • 0: Sem suporte (padrão)

    • 1: Com suporte, modo de consulta

    • 2: Com suporte, modo de índice (requer a reconstrução do índice invertido)

    Nota

    Este recurso está disponível apenas nas seguintes versões:

    • MySQL 8.0.1, e a versão secundária do mecanismo deve ser 8.0.1.1.57 ou posterior.

    • MySQL 8.0.2, e a versão secundária do mecanismo deve ser 8.0.2.2.37 ou posterior.

    Todos

Exemplos

1. Crie um índice de texto completo

Crie um índice de texto completo em cada coluna que exija recuperação de texto e selecione um tokenizador com base nos requisitos do seu negócio.

  1. Crie uma tabela de teste: crie uma tabela que contenha um índice colunar.

    CREATE TABLE t1 (
        id INT PRIMARY KEY,
        title VARCHAR(32) COMMENT "imci_fts(type=2)"
    )CHARSET utf8mb4 COMMENT 'columnar=1';
  2. (Opcional) Modifique o índice de texto completo: use a instrução ALTER TABLE para adicionar um índice de texto completo à coluna title e especifique o modo de mecanismo de pesquisa do tokenizador jieba.

    ALTER TABLE t1 MODIFY title VARCHAR(32) COMMENT "imci_fts(type=2,mode=0)";
  3. (Opcional) Verifique o resultado da tokenização: antes de selecionar um tokenizador, use a função dbms_imci.fts_tokenize para visualizar como diferentes tokenizadores processam o texto.

    CALL dbms_imci.fts_tokenize("I am PolarDB");
    -- Result: ["i", "am", "polardb"]  
    
    CALL dbms_imci.fts_tokenize("I am PolarDB", "type=1");
    -- Result: ["i ", " a", "am", "m ", " p", "po", "ol", "ar", "rd", "db"]
    
    CALL dbms_imci.fts_tokenize("I am PolarDB", "type=2");
    -- Result: ["PolarDB"]
    
    CALL dbms_imci.fts_tokenize("I am PolarDB", "type=2,mode=1");
    -- Result: ["polardb"]

2. Execute consultas de pesquisa de texto completo

Após a criação do índice, o IMCI o constrói em segundo plano. Após a conclusão da construção, execute consultas de texto usando MATCH...AGAINST ou instruções LIKE otimizadas.

  1. Consulte usando MATCH...AGAINST:

    -- Insert sample data
    INSERT INTO t1 VALUES 
    (16, 'polarDB full-text index feature title'), 
    (17, 'Database title performance tuning');
    -- Query records whose title column contains "index"
    SELECT * FROM t1 WHERE MATCH(title) AGAINST("title");

    Use EXPLAIN para visualizar o plano de execução. O operador FtsTableScan indica que a consulta atingiu o índice de texto completo.

    EXPLAIN SELECT * FROM t1 WHERE MATCH(title) AGAINST("title") AND id > 10;
    +----+------------------------+------+-----------------------------------------------------------------+
    | ID | Operator               | Name | Extra Info                                                      |
    +----+------------------------+------+-----------------------------------------------------------------+
    |  1 | Select Statement       |      | IMCI Execution Plan (max_dop = 32, max_query_mem = 41230008320) |
    |  2 | └─Compute Scalar       |      |                                                                 |
    |  3 |   └─FILTER             |      | Cond:(t1.id > 10)                                              |
    |  4 |     └─FtsTableScan     | t1   | Term:("title") Fallback:(t1.title LIKE "%title%")             |
    +----+------------------------+------+-----------------------------------------------------------------+

    Fallback indica que o sistema usa automaticamente LIKE para realizar uma varredura suplementar em dados incrementais ainda não indexados, garantindo a integridade dos resultados.

  2. Acelere consultas LIKE: para manter a compatibilidade com o código de negócio existente, o IMCI converte automaticamente consultas LIKE específicas em MATCH...AGAINST para acelerar o processo.

    SET imci_convert_like_to_match = on;
    EXPLAIN SELECT * FROM t1 WHERE title  LIKE "%title%";
    +----+------------------------+------+-----------------------------------------------------------------+
    | ID | Operator               | Name | Extra Info                                                      |
    +----+------------------------+------+-----------------------------------------------------------------+
    |  1 | Select Statement       |      | IMCI Execution Plan (max_dop = 32, max_query_mem = 41230008320) |
    |  2 | └─Compute Scalar       |      |                                                                 |
    |  3 |   └─FILTER             |      | Cond:(t1.title LIKE "%title%")                                 |
    |  4 |     └─FtsTableScan     | t1   | Term:("title") Fallback:(t1.title LIKE "%title%")             |
    +----+------------------------+------+-----------------------------------------------------------------+

    O plano de execução também exibe o operador FtsTableScan, confirmando a aceleração da consulta LIKE.

  3. Conversão de match para like: quando não há índice de texto completo disponível, o IMCI pode converter MATCH em LIKE para garantir a execução correta da consulta, utilizando ao máximo os índices existentes. O plano de execução mostra uma varredura completa da tabela.

    SET imci_enable_query_fts_like = on;
    EXPLAIN SELECT * FROM t1 WHERE MATCH(title) AGAINST("title");
    +----+----------------------+------+-----------------------------------------------------------------+
    | ID | Operator             | Name | Extra Info                                                      |
    +----+----------------------+------+-----------------------------------------------------------------+
    |  1 | Select Statement     |      | IMCI Execution Plan (max_dop = 32, max_query_mem = 41230008320) |
    |  2 | └─Compute Scalar     |      |                                                                 |
    |  3 |   └─Table Scan       | t1   | Cond:(title LIKE "%title%")                                    |
    +----+----------------------+------+-----------------------------------------------------------------+

3. Gerencie e monitore índices

Consulte o status de construção e os metadados de um índice. Exclua o índice quando não precisar mais dele.

  1. Monitore o progresso e o status da construção do índice:

    -- View all inverted indexes
    SHOW imci indexes fulltext;
    SELECT * FROM information_schema.imci_fts_indexes;
    
    -- View a specified inverted index
    SHOW imci indexes fulltext FOR [db_name].[table_name];
    SELECT * FROM information_schema.imci_fts_indexes 
    WHERE schema_name='[db_name]' AND table_name='[table_name]';
    
    -- View the metadata of a specified inverted index
    SELECT * FROM information_schema.imci_fts_index_metas 
    WHERE schema_name='[db_name]' AND table_name='[table_name]' AND column_name='[column_name]';
    
    -- View the segment data of a specified inverted index
    SELECT * FROM information_schema.imci_fts_index_segs 
    WHERE schema_name='[db_name]' AND table_name='[table_name]' AND column_name='[column_name]';
    
    -- View the columnar data of a specified inverted index
    SELECT * FROM information_schema.imci_fts_index_packs 
    WHERE schema_name='[db_name]' AND table_name='[table_name]' AND column_name='[column_name]';
  2. Exclua um índice de texto completo: caso não precise mais do índice de texto completo em uma coluna, modifique o COMMENT da coluna para excluí-lo.

    ALTER TABLE t1 MODIFY title VARCHAR(255) COMMENT 'imci_fts(enable=0)';

4. Parâmetros de configuração principais

Nome do parâmetro

Nível

Descrição

imci_enable_fts

Global

Indica se é possível criar índices invertidos em nós colunares.

  • ON (padrão): Ativado. Suporta tipos como strings e JSON.

  • OFF: Desativado.

imci_enable_fts_query

Global / Sessão

Indica se é possível usar índices invertidos em nós colunares.

  • ON: Ativado.

  • OFF (padrão): Desativado.

imci_fts_build_pack_cnt_min

Global

O número mínimo de blocos de dados colunares para cada índice invertido durante a construção do índice.

Valores válidos: 0 a 8192. Valor padrão: 8. O valor 0 indica que o índice não será construído no momento.

imci_fts_build_pack_cnt_max

Global

O número máximo de blocos de dados colunares para cada índice invertido durante a construção do índice.

Valores válidos: 0 a 8192. Valor padrão: 128.

imci_fts_build_segment_size

Global

O tamanho do segmento de cada índice invertido durante a construção do índice.

Valores válidos: 0 a 4294967295. Valor padrão: 536870912 (512 MB). Unidade: bytes.

imci_fts_lru_cache_capacity

Global

O espaço de cache de dicionário para índices invertidos.

Valores válidos: [DBNodeClassMemory1/10~DBNodeClassMemory1/2]. Valor padrão: [DBNodeClassMemory*10/100].

imci_enable_fts_pruner

Global / Sessão

Define se a otimização de pré-filtragem do índice invertido é ativada.

  • ON (padrão): Ativado.

  • OFF: Desativado.

imci_convert_like_to_match

Global / Sessão

Especifica se a conversão de like em match é ativada para usar o índice invertido e acelerar a consulta.

  • ON: Ativado.

  • OFF (padrão): Desativado.

  • ONLY_MATCH: Ativado, e a expressão like é ignorada;

imci_enable_query_fts_like

Global / Sessão

Especifica se a conversão de match em like é ativada.

  • ON: Ativado.

  • OFF (padrão): Desativado.

imci_enable_match_expr_fallback

Global / Sessão

Especifica se as consultas em dados incrementais ainda não incluídos no índice invertido são ativadas.

  • ON (padrão): Ativado.

  • OFF: Desativado.

imci_fts_build_fts_cnt

Global

A concorrência das construções de índice invertido.

Valores válidos: 0 a 512. Valor padrão: 4.

Nota

Este parâmetro se aplica apenas às seguintes versões:

  • MySQL 8.0.1, e a versão secundária do mecanismo deve ser 8.0.1.1.54 ou posterior.

  • MySQL 8.0.2, e a versão secundária do mecanismo deve ser 8.0.2.2.34 ou posterior.

imci_fts_user_dict_table

Global

O dicionário personalizado para o índice de texto completo. Formato: database_name/table_name.

Nota

Este parâmetro se aplica apenas às seguintes versões:

  • MySQL 8.0.1, e a versão secundária do mecanismo deve ser 8.0.1.1.54 ou posterior.

  • MySQL 8.0.2, e a versão secundária do mecanismo deve ser 8.0.2.2.34 ou posterior.

imci_fts_user_dict_update

Global

Especifica se o recarregamento do dicionário personalizado especificado por imci_fts_user_dict_table é ativado.

  • ON (padrão): Ativado.

  • OFF: Desativado.

Nota

Este parâmetro se aplica apenas às seguintes versões:

  • MySQL 8.0.1, e a versão secundária do mecanismo deve ser 8.0.1.1.54 ou posterior.

  • MySQL 8.0.2, e a versão secundária do mecanismo deve ser 8.0.2.2.34 ou posterior.

imci_convert_json_overlap_to_match

Global/Sessão

Especifica se o json_overlaps é ativado para usar o índice JSON e acelerar a consulta.

  • ON: Ativado.

  • OFF (padrão): Desativado.

imci_convert_json_contains_to_match

Global/Sessão

Especifica se o json_contains é ativado para usar o índice JSON e acelerar a consulta.

  • ON: Ativado.

  • OFF (padrão): Desativado.

imci_convert_json_extract_to_match

Global/Sessão

Especifica se o json_extract é ativado para usar o índice JSON e acelerar a consulta.

  • ON: Ativado.

  • OFF (padrão): Desativado.

imci_convert_equal_to_match

Global/Sessão

Especifica se a expressão = é ativada para usar o índice de igualdade e acelerar a consulta.

  • ON: Ativado.

  • OFF (padrão): Desativado.

imci_convert_in_to_match

Global/Sessão

Especifica se a expressão IN é ativada para usar o índice de igualdade e acelerar a consulta.

  • ON: Ativado.

  • OFF (padrão): Desativado.

imci_convert_ne_to_match

Global/Sessão

Especifica se a expressão != é ativada para usar o índice de igualdade e acelerar a consulta.

  • ON: Ativado.

  • OFF (padrão): Desativado.

imci_enable_fts_synonym

Global / Sessão

Especifica se há suporte para sinônimos.

  • ON (padrão): Ativado.

  • OFF: Desativado.

Nota

Este parâmetro está disponível apenas nas seguintes versões:

  • MySQL 8.0.1, e a versão secundária do mecanismo deve ser 8.0.1.1.57 ou posterior.

  • MySQL 8.0.2, e a versão secundária do mecanismo deve ser 8.0.2.2.37 ou posterior.

imci_enable_fts_parse_term_with_and

Global / Sessão

Especifica se a string de consulta tokenizada é avaliada com AND.

  • ON (padrão): Ativado.

  • OFF: Desativado. Avaliado usando OR.

imci_enable_fts_parse_term_with_phrase

Global / Sessão

Especifica se, no modo BOOLEAN, a string de consulta tokenizada depende estritamente das posições.

  • ON: Ativado.

  • OFF (padrão): Desativado.

imci_fts_stop_word_table

Global

As palavras de parada personalizadas para o índice de texto completo. Formato: database_name/table_name. Para obter detalhes, consulte Palavras de parada personalizadas.

Nota

Este parâmetro está disponível apenas nas seguintes versões:

  • MySQL 8.0.1, e a versão secundária do mecanismo deve ser 8.0.1.1.57 ou posterior.

  • MySQL 8.0.2, e a versão secundária do mecanismo deve ser 8.0.2.2.37 ou posterior.

imci_fts_stop_word_update

Global

Especifica se o recarregamento das palavras de parada personalizadas especificadas por imci_fts_stop_word_table é ativado.

  • ON (padrão): Ativado.

  • OFF: Desativado.

Nota

Este parâmetro está disponível apenas nas seguintes versões:

  • MySQL 8.0.1, e a versão secundária do mecanismo deve ser 8.0.1.1.57 ou posterior.

  • MySQL 8.0.2, e a versão secundária do mecanismo deve ser 8.0.2.2.37 ou posterior.

imci_fts_synonym_table

Global

Os sinônimos personalizados para o índice de texto completo. Formato: database_name/table_name. Para obter detalhes, consulte Custom synonyms.

Nota

Este parâmetro está disponível apenas nas seguintes versões:

  • MySQL 8.0.1, e a versão secundária do mecanismo deve ser 8.0.1.1.57 ou posterior.

  • MySQL 8.0.2, e a versão secundária do mecanismo deve ser 8.0.2.2.37 ou posterior.

imci_fts_synonym_update

Global

Especifica se o recarregamento dos sinônimos personalizados especificados por imci_fts_synonym_table é ativado.

  • ON (padrão): Ativado.

  • OFF: Desativado.

Nota

Este parâmetro está disponível apenas nas seguintes versões:

  • MySQL 8.0.1, e a versão secundária do mecanismo deve ser 8.0.1.1.57 ou posterior.

  • MySQL 8.0.2, e a versão secundária do mecanismo deve ser 8.0.2.2.37 ou posterior.

Importante

Parâmetros no nível GLOBAL não podem ser modificados diretamente pela linha de comando; defina-os apenas no console. Ao executar tal parâmetro pela linha de comando, a operação é tratada como uma operação de nível SESSION por padrão.

Dicionários personalizados

O recurso de índice de texto completo do IMCI oferece suporte a dicionários personalizados implementados por meio de tabelas personalizadas. Esses dicionários produzem resultados de tokenização mais adequados aos cenários do seu negócio.

Crie uma tabela de dicionário personalizado

  1. Primeiro, defina uma tabela com a mesma estrutura da tabela my_fts_dict. Os nomes das colunas devem ser idênticos aos da tabela my_fts_dict.

    • type: o tipo de tokenizador. Há suporte apenas para os tokenizadores jieba (tipo 2) e ik (tipo 3).

    • word: a palavra da entidade.

    • is_added: adiciona ao (valor 1) ou remove do (valor 2) dicionário personalizado.

    CREATE TABLE my_fts_dict (
      `type` INT UNSIGNED NOT NULL COMMENT '2 for jieba, 3 for ik',
      `word` VARCHAR(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'dict word',
      `is_added` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1 for add, 2 for delete'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='imci fts user dict';
  2. O dicionário personalizado é uma tabela InnoDB. As operações de leitura e gravação são iguais às de uma tabela comum.

    1. Adicione uma entrada:

      INSERT INTO my_fts_dict VALUES(2, "PolarDB", 1)
    2. Remova uma entrada:

      INSERT INTO my_fts_dict(type, word, is_added) VALUES(2, "PolarDB", 2);
      or
      DELETE FROM my_fts_dict WHERE type=2 AND word = "PolarDB";

Configure um dicionário personalizado

  • Após criar a tabela de dicionário personalizado, configure o valor da opção imci_fts_user_dict_table. Por exemplo, test/my_fts_dict'.

    SET GLOBAL imci_fts_user_dict_table = 'test/my_fts_dict';
  • Se imci_fts_user_dict_table já estiver definido, defina imci_fts_user_dict_update como ON para acionar o recarregamento do dicionário personalizado especificado por imci_fts_user_dict_table.

    SET GLOBAL imci_fts_user_dict_update = ON;
    Nota

    Um novo dicionário personalizado entra em vigor apenas para índices invertidos construídos posteriormente. Para aplicá-lo a um índice invertido já construído, reconstrua o índice.

Sinônimos personalizados

O recurso de índice de texto completo do IMCI oferece suporte a sinônimos personalizados implementados por meio de tabelas personalizadas.

Nota

O recurso de sinônimos personalizados aplica-se apenas às seguintes versões:

  • MySQL 8.0.1, e a versão secundária do mecanismo deve ser 8.0.1.1.57 ou posterior.

  • MySQL 8.0.2, e a versão secundária do mecanismo deve ser 8.0.2.2.37 ou posterior.

Crie uma tabela de sinônimos personalizados

Primeiro, defina uma tabela com a mesma estrutura da tabela my_synonym_dict. Os nomes das colunas devem ser idênticos aos da tabela my_synonym_dict.

  • word: a lista de sinônimos. Separe palavras diferentes com vírgulas.

  • type: o tipo de sinônimo.

    • 0 indica que todas as palavras na lista são sinônimas entre si. Por exemplo, "db,database,polardb" significa "db" <=> "database" <=> "polardb". Ou seja, ao pesquisar por "db", "database" ou "polardb", o sistema retorna todos os dados correspondentes a "db", "database" ou "polardb".

    • 1 indica que a primeira palavra na lista é o termo principal e as demais são seus sinônimos. Por exemplo, "db,database,polardb" significa "db" => "database", "polardb". Ou seja, ao pesquisar por "db", o sistema retorna todos os dados correspondentes a "db", "database" ou "polardb". No entanto, ao pesquisar por "database", apenas os dados correspondentes a "database" são retornados.

CREATE TABLE my_synonym_dict (
  `word` VARCHAR(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'comma-separated synonyms',
  `type` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '0 for equivalent, 1 for mapping'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='imci fts synonym';

O dicionário personalizado é uma tabela InnoDB. As operações de leitura e gravação são iguais às de uma tabela comum.

  • Adicione uma entrada:

    INSERT INTO my_synonym_dict VALUES("db,database,polardb", 0);
    INSERT INTO my_synonym_dict VALUES("imci,clickhouse,duckdb", 1);
  • Remova uma entrada:

    DELETE FROM my_synonym_dict WHERE type=1 AND word = "imci,clickhouse,duckdb";

Configure sinônimos personalizados

Após criar a tabela de sinônimos personalizados, configure o valor da opção imci_fts_synonym_table. Por exemplo, test/my_synonym_dict, em que test é o nome do banco de dados e my_synonym_dict é o nome da tabela.

SET GLOBAL imci_fts_synonym_table = 'test/my_synonym_dict';

Se imci_fts_synonym_table já estiver definido, defina imci_fts_synonym_update como ON para acionar o recarregamento dos sinônimos personalizados especificados por imci_fts_synonym_table.

SET GLOBAL imci_fts_synonym_update = ON;
Nota

Se synonym estiver definido como modo de índice (como COMMENT "imci_fts(type=0 synonym=1)"), os sinônimos atualizados entrarão em vigor apenas para a parte recém-adicionada do índice invertido. Para aplicá-los a todo o índice, reconstrua o índice de texto completo.

Palavras de parada personalizadas

O recurso de índice de texto completo do IMCI oferece suporte a palavras de parada personalizadas implementadas por meio de tabelas personalizadas.

Nota

O recurso de palavras de parada personalizadas aplica-se apenas às seguintes versões:

  • MySQL 8.0.1, e a versão secundária do mecanismo deve ser 8.0.1.1.57 ou posterior.

  • MySQL 8.0.2, e a versão secundária do mecanismo deve ser 8.0.2.2.37 ou posterior.

Crie uma tabela de palavras de parada personalizadas

Primeiro, defina uma tabela com a mesma estrutura da tabela my_stop_words. Os nomes das colunas devem ser idênticos aos de my_stop_words.

  • word: a palavra de parada.

  • is_added: adiciona ao (valor 1) ou remove do (valor 0) dicionário personalizado.

CREATE TABLE my_stop_words (
  `word` VARCHAR(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'stop word',
  `is_added` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1 for add, 0 for delete'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='imci fts stop word';

O dicionário personalizado é uma tabela InnoDB. As operações de leitura e gravação são iguais às de uma tabela comum.

  • Adicione uma entrada:

    INSERT INTO my_stop_words VALUES("am", 1);
    INSERT INTO my_stop_words VALUES("chinese", 1);
  • Remova uma entrada:

    INSERT INTO my_stop_words(word, is_added) VALUES("chinese", 0);
    -- or
    DELETE FROM my_stop_words WHERE is_added=1 AND word = "chinese";

Configure palavras de parada personalizadas

Após criar a tabela de palavras de parada personalizadas, configure o valor da opção imci_fts_stop_word_table. Por exemplo, test/my_stop_words, em que test é o nome do banco de dados e my_stop_words é o nome da tabela.

SET GLOBAL imci_fts_stop_word_table = 'test/my_stop_words';

Se imci_fts_stop_word_table já estiver definido, defina imci_fts_stop_word_update como ON para acionar o recarregamento das palavras de parada personalizadas especificadas por imci_fts_stop_word_table.

SET GLOBAL imci_fts_stop_word_update = ON;
Nota

Um novo dicionário personalizado entra em vigor apenas para índices invertidos construídos posteriormente. Para aplicá-lo a um índice invertido já construído, reconstrua o índice.

Perguntas frequentes

P1: Como selecionar um tokenizador adequado?

  • Texto em inglês ou formatado: use o tokenizador type=0 (token) padrão, que tokeniza o texto por espaços e pontuação.

  • Pesquisa precisa em chinês: use o modo padrão de type=2 (jieba) ou type=3 (ik).

  • Recuperação de conteúdo JSON: use type=4 (json) junto com o parâmetro expr para especificar os caminhos JSON a serem indexados.

  • Use a função dbms_imci.fts_tokenize para visualizar como diferentes tokenizadores processam o texto.

P2: Por que minha consulta não usa o índice de texto completo?

  1. Verifique se SET imci_enable_fts_query = ON; foi executado. Essa é a causa mais comum.

  2. Verifique a saída do EXPLAIN para confirmar a presença do operador FtsTableScan. Caso contrário, o padrão de consulta pode não corresponder ou o sistema pode ter determinado que uma varredura completa da tabela tem custo menor.

P3: Qual é a diferença entre consultas LIKE e MATCH...AGAINST?

  • LIKE '%keyword%' causa uma varredura completa da tabela quando não existe índice de texto completo, resultando em baixo desempenho. Mesmo com a aceleração do IMCI, seus recursos são limitados.

  • MATCH...AGAINST é uma sintaxe projetada para recuperação de texto completo. Oferece alto desempenho e também é compatível com recursos avançados, como consultas booleanas mais complexas e ordenação por relevância. Para novos aplicativos, use MATCH...AGAINST.