Todos os produtos
Search
Central de documentação

Hologres:Índice invertido de texto completo

Última atualização: Jul 02, 2026

As versões 4.0 e posteriores do Hologres oferecem suporte a um índice invertido de texto completo. Esse recurso é baseado no mecanismo de busca de texto completo de alto desempenho Tantivy. Ele também oferece suporte ao algoritmo de pontuação de similaridade BM25, permitindo classificação de documentos, busca por palavras-chave e busca por frases.

Como funciona

Ao gravar texto de origem no Hologres, ele cria um arquivo de índice invertido de texto completo para cada arquivo de dados com base na configuração do índice. O processo começa quando um tokenizer divide o texto em tokens. O índice então registra o mapeamento de cada token para seu texto de origem, junto com sua posição e frequência do termo.

Ao realizar uma busca de texto completo, o Hologres primeiro tokeniza o texto da consulta em um conjunto de tokens de consulta. Em seguida, o Hologres usa o algoritmo BM25 para calcular uma pontuação de relevância para cada texto de origem em relação ao conjunto de tokens de consulta. Esse processo permite uma busca de texto completo de alto desempenho e alta precisão.

Considerações

  • No Hologres V4.0 e versões posteriores, os índices invertidos de texto completo são suportados apenas em tabelas com armazenamento colunar e armazenamento híbrido linha-coluna, não sendo suportados em tabelas com armazenamento por linha.

  • Você pode criar um índice invertido de texto completo apenas em colunas TEXT, CHAR ou VARCHAR.

  • Você pode criar apenas um índice invertido de texto completo por coluna. Para indexar várias colunas, crie um índice separado para cada uma.

  • Após criar um índice invertido de texto completo, os arquivos de índice para dados existentes e recém-carregados em lote são construídos de forma assíncrona durante a compactação de dados. Até que o índice seja construído, a pontuação de relevância BM25 para esses dados será 0.

  • O comportamento de indexação para gravações de dados em tempo real varia conforme a versão. Antes da V4.0.8, os índices são construídos de forma síncrona. A partir da V4.0.8, para melhorar a eficiência de gravação, o sistema atualiza o índice em memória de forma assíncrona a cada segundo. Você pode consultar dados usando o índice somente após a conclusão de uma atualização.

  • Você pode realizar uma busca de texto completo apenas em colunas que possuem um índice invertido de texto completo. A busca em colunas sem índice não é suportada.

  • Recomendamos o uso de recursos Serverless para importação de dados em lote. Esses recursos realizam a compactação e constroem o índice invertido de texto completo de forma síncrona durante o processo de importação. Para mais informações, consulte Usar o Serverless Computing para executar tarefas de leitura e gravação e Usar o Serverless Computing para executar tarefas de compactação. Se você não usar recursos Serverless, recomendamos acionar manualmente a compactação após uma importação em lote ou uma modificação de índice com o seguinte comando.

    VACUUM <schema_name>.<table_name>;
  • O algoritmo de busca BM25 calcula as pontuações de relevância no nível do arquivo. Se você importar dados em lotes pequenos, recomendamos acionar manualmente a compactação conforme necessário para mesclar arquivos de dados e melhorar a precisão da busca.

  • Você pode usar recursos Serverless para executar consultas de busca de texto completo.

  • Use a tabela a seguir para escolher o tokenizer adequado ao seu cenário:

    Cenário

    Tokenizer

    Descrição

    Extração de palavras-chave de artigos longos

    Jieba

    Oferece suporte à descoberta de novas palavras e à alternância de modos complexos.

    Busca em texto descritivo em chinês

    IK

    Identifica termos em chinês com precisão.

    Busca em texto semelhante a títulos em inglês

    Simple, Whitespace, Standard

    Simples e eficiente. Escolha um com base no seu texto específico.

    Busca fuzzy em texto semelhante a logs

    Ngram

    Sem dicionário e adequado para consultas de texto fuzzy.

    Busca baseada em Pinyin para nomes de produtos ou pessoas em chinês

    Pinyin

    Oferece suporte a diversos cenários de busca por Pinyin em chinês, incluindo Pinyin completo, abreviações de primeira letra e caracteres com múltiplas pronúncias.

Gerenciar índices

Criar um índice

Sintaxe

CREATE INDEX [ IF NOT EXISTS ] idx_name ON table_name
       USING FULLTEXT (column_name [ , ... ])
       [ WITH ( storage_parameter [ = value ] [ , ... ] ) ];

Parâmetros

Parâmetro

Descrição

idx_name

O nome do índice.

table_name

O nome da tabela de destino.

column_name

A coluna para o índice invertido de texto completo.

storage_parameter

Especifica os parâmetros para o índice invertido de texto completo. Os seguintes parâmetros são suportados:

  • tokenizer: O nome do tokenizer. Os seguintes tokenizers são suportados:

    • jieba (padrão): Um tokenizer para chinês que combina correspondência baseada em regras e modelos estatísticos.

    • whitespace: Um tokenizer que divide o texto por espaços em branco.

    • standard: Um tokenizer baseado nas Anexo #29 do Padrão Unicode.

    • simple: Um tokenizer que divide o texto por espaços em branco e pontuação.

    • keyword: Um tokenizer que gera todo o campo de entrada como um único token.

    • icu: Um tokenizer para processamento de texto multilíngue.

    • ik: Um tokenizer para chinês baseado no IK Analyzer. Reconhece automaticamente formatos especiais como palavras em inglês, endereços de e-mail, URLs (sem ://) e endereços IP. Suportado a partir do Hologres V4.0.9.

    • ngram: Um tokenizer baseado em janela deslizante de caracteres que divide o texto em n-gramas (sequências contíguas de n caracteres). Melhora a revocação e a correspondência fuzzy, sendo adequado para acelerar consultas LIKE and ILIKE. Suportado a partir do Hologres V4.0.9.

    • pinyin: Um tokenizer de Pinyin. Gera Pinyin para caracteres e palavras em chinês e pode derivar divisões de Pinyin para cadeias não chinesas. Isso permite uma geração de Pinyin mais precisa e maior revocação na busca. Suportado a partir do Hologres V4.0.9.

  • analyzer_params: A configuração do tokenizer, especificada como uma cadeia de caracteres no formato JSON.

    • Cada tokenizer tem uma configuração padrão de analyzer_params Na maioria dos casos, você pode usar as configurações padrão especificando apenas o parâmetro tokenizeranalyzer_params

    • Você pode personalizar algumas dessas configurações. Para mais informações, consulte Operações avançadas: Personalizar configurações de tokenizer.

  • index_options: Especifica o nível de detalhe a ser armazenado no índice, o que afeta o armazenamento necessário e os recursos suportados. Suportado a partir do Hologres V4.1.9. Para detalhes, consulte Configuração de index_options abaixo.

Nota

Cada índice suporta apenas um tokenizeranalyzer_params

Configuração de index_options

O parâmetro index_options suporta três níveis. As opções de nível superior incluem automaticamente todas as informações dos níveis inferiores: freqs inclui todas as informações de docs, e positions inclui todas as informações de freqs and docs.

Valor

Conteúdo do índice

Impacto e limitações

Casos de uso

positions (padrão)

ID do documento + frequência do termo + posição

Suporte completo a recursos: Suporta consultas de frase e pontuação de relevância padrão.

Cenários gerais de busca de texto completo.

freqs

ID do documento + frequência do termo

Consultas de frase não são suportadas e retornam um erro.

Cenários que requerem pontuação e classificação com base na frequência do termo, mas não precisam de correspondência exata de frase.

docs

Apenas ID do documento

  • Como as informações de frequência do termo estão ausentes, a pontuação de relevância ignora as diferenças de frequência do termo (a pontuação TF é a mesma para todos os documentos correspondentes).

  • Consultas de frase não são suportadas e retornam um erro.

Ideal para cenários sensíveis ao armazenamento que requerem apenas verificações de existência (filtragem) e não precisam de pontuação de relevância.

Nota

Para índices que usam o tokenizer keyword, o nível de registro é fixo como docs, e a configuração index_options não se aplica.

Exemplos

  • Crie um índice invertido de texto completo com o tokenizer e a configuração padrão (o tokenizer jieba).

    CREATE INDEX idx1 ON tbl 
           USING FULLTEXT (col1);
  • Especifique explicitamente o tokenizer ik e use sua configuração padrão.

    CREATE INDEX idx1 ON tbl 
           USING FULLTEXT (col1)
           WITH (tokenizer = 'ik');
  • Especifique explicitamente uma configuração personalizada de tokenizer: o tokenizer jieba no modo exact com apenas o filtro lowercase

    CREATE INDEX idx1 ON tbl 
           USING FULLTEXT (col1)
           WITH (tokenizer = 'jieba',
                 analyzer_params = '{"tokenizer":{"type":"jieba","mode":"exact"}, "filter":["lowercase"]}');
  • Defina index_options como freqs ao criar o índice. Isso economiza espaço, mas não suporta consultas de frase. Suportado a partir do Hologres V4.1.9.

    CREATE INDEX idx1 ON tbl
           USING FULLTEXT (col1)
           WITH (index_options = 'freqs');
Nota
  • Após criar um índice invertido de texto completo, a compactação constrói os arquivos de índice após a importação de dados.

  • Recomendamos o uso de recursos de computação Serverless para realizar importações em lote. Esses recursos concluem a compactação e constroem o índice invertido de texto completo de forma síncrona durante a importação de dados. Para mais informações, consulte Usar computação serverless para executar tarefas de leitura e gravação e Usar computação serverless para executar tarefas de compactação.

  • Se você não usar recursos serverless, recomendamos acionar manualmente a compactação após uma importação em lote ou modificação de índice executando o seguinte comando. Para mais informações, consulte Compactação (Beta)

    VACUUM <schema_name>.<table_name>;

Alterar um índice

Sintaxe

-- Modify index configuration
ALTER INDEX [ IF EXISTS ] <idx_name> SET ( <storage_parameter> = '<storage_value>' [ , ... ] );

-- Reset to default configuration
ALTER INDEX [ IF EXISTS ] <idx_name> RESET ( <storage_parameter> [ , ... ] );

Parâmetros

Para descrições detalhadas dos parâmetros, consulte Parâmetros.

Exemplos

Nota

Após alterar um índice invertido de texto completo, a compactação constrói os arquivos de índice de forma assíncrona. Recomendamos acionar manualmente a compactação após alterar um índice executando o comando VACUUM <schema_name>.<table_name>; Para mais informações, consulte Compaction

  • Altere o tokenizer do índice para standard

    ALTER INDEX idx1 SET (tokenizer = 'standard');
  • Altere o tokenizer do índice para ik in ik_max_word

    ALTER INDEX idx1 SET (
      tokenizer = 'ik',
      analyzer_params = '{"tokenizer":{"type":"ik","mode":"ik_max_word","enable_lowercase": false}}'
    );

  • Redefina para o tokenizer padrão jieba e use sua configuração padrão de analyzer_params.

    ALTER INDEX idx1 RESET (tokenizer);
    ALTER INDEX idx1 RESET (tokenizer, analyzer_params);
  • Redefina para a configuração padrão de analyzer_params do tokenizer atual.

    ALTER INDEX idx1 RESET (analyzer_params);
  • Altere o index_options do índice para docs.

    ALTER INDEX idx1 SET (index_options = 'docs');
  • Redefina o index_options para seu valor padrão, positions.

    ALTER INDEX idx1 RESET (index_options);

Excluir um índice

Sintaxe

DROP INDEX [ IF EXISTS ] <idx_name> [ RESTRICT ];

Parâmetros

Para descrições detalhadas dos parâmetros, consulte Parâmetros.

Visualizar índices

O Hologres fornece a tabela do sistema hologres.hg_index_properties

SELECT * FROM hologres.hg_index_properties;

Execute a seguinte instrução SQL para visualizar a tabela e a coluna associadas a um índice.

SELECT 
    t.relname AS table_name, 
    a.attname AS column_name
FROM pg_class t
    JOIN pg_index i ON t.oid = i.indrelid
    JOIN pg_class idx ON i.indexrelid = idx.oid
    JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = ANY(i.indkey)
WHERE t.relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = '<namespace>')
    AND idx.relname = '<indexname>'
LIMIT 1;

Parâmetros:

  • namespace: O valor do campo table_namespaceSELECT * FROM hologres.hg_index_properties;

  • indexname: O nome real do índice.

  • Visualizar o progresso de construção do índice

    Após criar um índice invertido de texto completo, você pode usar a função integrada hg_show_build_index_progress

    Exemplo

    SELECT * FROM hg_show_build_index_progress('<table_name>');

    Notas de uso

    • Para chamar essa função, você deve ter a permissão SELECT na tabela especificada.

    • A função retorna informações de construção para todos os índices de texto completo na tabela, incluindo o número de arquivos construídos, o número total de arquivos, o progresso de construção em porcentagem e o tempo restante estimado.

    Valores de retorno

    O resultado inclui os seguintes campos:

    Campo

    Tipo de dados

    Descrição

    schema_name

    TEXT

    O nome do schema que contém o índice.

    table_name

    TEXT

    O nome da tabela.

    index_name

    TEXT

    O nome do índice.

    index_id

    BIGINT

    O ID exclusivo do índice.

    am_name

    TEXT

    O tipo do índice.

    built_index_size

    TEXT

    O tamanho do índice que foi construído.

    built_num_files

    INTEGER

    O número de arquivos para os quais a construção do índice foi concluída.

    target_num_files

    INTEGER

    O número total de arquivos para os quais o índice precisa ser construído.

    progress

    TEXT

    O progresso de construção, em porcentagem.

    estimated_remaining_time

    TEXT

    O tempo restante estimado de construção.

    Busca de texto completo usando um índice

    O Hologres suporta uma variedade de modos de busca, permitindo que você adapte as buscas de texto completo à sua lógica de negócios.

    Modo de busca

    Descrição

    Correspondência de palavras-chave

    Busca palavras-chave em um objeto de busca tokenizado. Você pode definir a relação entre palavras-chave usando a lógica AND/OR.

    Busca por frase

    Busca uma frase completa. Uma correspondência requer que as palavras da frase apareçam dentro de uma distância especificada umas das outras.

    Busca em linguagem natural

    Permite definir condições de consulta complexas usando sintaxe de linguagem natural. Isso inclui a especificação de lógica AND/OR, termos obrigatórios, termos excluídos e frases.

    Busca por termo

    Realiza uma correspondência exata para o objeto de busca. O índice deve conter a cadeia de consulta exata para retornar uma correspondência.

    Função TEXT_SEARCH

    A função TEXT_SEARCH calcula a pontuação de relevância BM25 para uma origem de busca com base em um objeto de busca.

    Sintaxe da função

    TEXT_SEARCH (
      <search_data> TEXT/VARCHAR/CHAR
      ,<search_expression> TEXT
      [ ,<mode> TEXT DEFAULT 'match'
      ,<operator> TEXT DEFAULT 'OR'
      ,<tokenizer> TEXT DEFAULT ''
      ,<analyzer_params> TEXT DEFAULT ''
      ,<options> TEXT DEFAULT '']
    )

    Parâmetros

    Parâmetro

    Obrigatório

    Descrição

    search_data

    Sim

    A origem da busca. Os tipos de dados suportados são TEXT, VARCHAR, e CHAR. Esse parâmetro deve ser uma coluna que possui um índice de texto completo. Caso contrário, um erro será retornado.

    search_expression

    Sim

    O objeto de busca. Os tipos de dados suportados são TEXT, VARCHAR, e CHAR. Esse parâmetro deve ser uma constante.

    mode

    Não

    O modo de busca. Os seguintes modos são suportados:

    • match (padrão): correspondência de palavras-chave. Cada token produzido pela tokenização é tratado como uma palavra-chave. O parâmetro operator define a relação entre palavras-chave e tem como padrão OR.

    • phrase: busca por frase. O parâmetro slop em options configura a distância máxima entre palavras em uma frase. O valor padrão é 0, o que significa que as palavras devem estar adjacentes. A busca por frase não suporta consultas fuzzy.

    • natural_language: busca em linguagem natural. Este modo suporta condições de consulta complexas, como lógica AND/OR, termos obrigatórios, termos excluídos e frases. Para mais informações, consulte Tantivy.

    • term: busca por termo. A search_expression não é tokenizada ou processada de outra forma. A função realiza uma correspondência exata no índice. A busca por termo não suporta consultas fuzzy.

    • fuzzy: busca fuzzy. Realiza correspondência fuzzy na search_expression com base na distância de edição. Suportado no Hologres V4.2 e versões posteriores.

    operator

    Não

    Especifica o operador lógico a ser usado entre palavras-chave. Esse parâmetro tem efeito apenas quando mode é definido como match. Os seguintes valores são suportados:

    • OR (padrão): Se o objeto de busca contiver múltiplos tokens, a função retorna uma correspondência se qualquer token for encontrado.

    • AND: Se o objeto de busca contiver múltiplos tokens, a função retorna uma correspondência apenas se todos os tokens forem encontrados.

    tokenizer, analyzer_params

    Não

    Especifica o tokenizer e sua configuração para o search_expression. Na maioria dos casos, você não precisa configurar esses parâmetros.

    • Se não especificado, a função usa o mesmo tokenizer e configuração do índice invertido de texto completo na coluna search_data. Se a origem da busca for uma constante, o tokenizer padrão (jieba) é usado.

    • Se especificado, a função tokeniza o search_expression usando o tokenizer e a configuração especificados.

    options

    Não

    Outros parâmetros para busca de texto completo. O formato dos parâmetros de entrada é 'key1=v1;key2=v2;....;keyN=vN;'. As seguintes opções são suportadas:

    • slop: tem efeito apenas quando mode é phrase. Pode ser 0 (padrão) ou um inteiro positivo e define a distância máxima permitida entre palavras em uma frase.

    • fuzziness: tem efeito apenas quando mode é match, natural_language, or fuzzy. Especifica a distância de edição máxima (o número total de inserções, exclusões ou substituições de caracteres) para correspondência fuzzy. Os valores suportados são:

      • 0 (padrão): desativa a correspondência fuzzy. A cadeia de busca deve corresponder exatamente.

      • 1 or 2: uma distância de edição de 1 ou 2 é permitida.

      • AUTO: a distância de edição é selecionada automaticamente com base no comprimento da cadeia de busca. A regra padrão é: comprimento <3 → 0, comprimento 3–5 → 1, comprimento >5 → 2.

      • AUTO:<low>,<high>: personaliza os limites do AUTO. Por exemplo, AUTO:3,5 significa: comprimento <3 → 0, comprimento 3–5 → 1, comprimento ≥6 → 2.

    • fuzzy_max_expansions: tem efeito apenas quando mode é match, natural_language, or fuzzy. Especifica o número máximo de termos candidatos gerados durante a correspondência fuzzy. O valor padrão é 50. Um valor maior melhora a revocação, mas aumenta a sobrecarga da consulta.

    • fuzzy_transpositions: tem efeito apenas quando mode é match, natural_language, or fuzzy. Especifica se uma transposição de dois caracteres adjacentes é tratada como uma única edição. O valor padrão é true.

    Nota

    O parâmetro slop representa o intervalo máximo permitido (ou custo de transformação) entre as palavras em uma frase. Para tokenizers como jieba, keyword, e icu, a unidade de distância é o número de caracteres, não o número de tokens. Para tokenizers como standard, simple, e whitespace, a unidade é o número de tokens.

    Valor de retorno

    Retorna um valor FLOAT

    Exemplos

    • Use o modo de correspondência de palavras-chave e altere o operador para AND

      -- It is recommended to specify parameter names.
      SELECT TEXT_SEARCH (content, 'machine learning', operator => 'AND') FROM tbl;
      
      -- If you do not specify parameter names, you must provide them in the correct order.
      SELECT TEXT_SEARCH (content, 'machine learning', 'match', 'AND') FROM tbl;
    • Use o modo de busca por frase e defina slop como 2.

      SELECT TEXT_SEARCH (content, 'machine learning', 'phrase', options => 'slop=2;') FROM tbl;
    • Use o modo de busca em linguagem natural.

      -- Use the AND and OR operators to define search logic for the tokens.
      SELECT TEXT_SEARCH (content, 'machine AND (system OR recognition)', 'natural_language') FROM tbl;
      
       -- Use + (required term) and - (excluded term) to define search logic for the tokens.
      SELECT TEXT_SEARCH (content, '+learning -machine system', 'natural_language') FROM tbl;
    • Use o modo de busca por termo.

      SELECT TEXT_SEARCH (content, 'machine learning', 'term') FROM tbl;
    • Use o modo de busca fuzzy com fuzziness definido como 1.

      SELECT TEXT_SEARCH (content, 'machine learning', 'fuzzy', options => 'fuzziness=1;') FROM tbl;

    Função TOKENIZE

    A função TOKENIZE retorna os resultados da tokenização com base na configuração do tokenizer. Você pode usar essa função para depurar a tokenização de um índice invertido de texto completo.

    Sintaxe da função

    TOKENIZE (
      <search_data> TEXT
      [ ,<tokenizer> TEXT DEFAULT ''
      ,<analyzer_params> TEXT DEFAULT '']
    )

    Parâmetros

    • search_data: Obrigatório. O texto de destino a ser tokenizado. Esse parâmetro deve ser uma constante.

    • tokenizer, analyzer_params: Opcional. Especifica o tokenizer e sua configuração para o texto search_data. O tokenizer padrão é jieba.

    Valor de retorno

    Retorna um array TEXT

    Verificar o uso do índice

    Você pode verificar o plano de execução para ver se uma consulta SQL usa o índice invertido de texto completo. A presença de Fulltext Filter no plano indica que o índice foi usado com sucesso. Para mais informações sobre planos de execução, consulte EXPLAIN e EXPLAIN ANALYZE.

    SQL de exemplo:

    EXPLAIN ANALYZE SELECT * FROM wiki_articles WHERE text_search(content, 'Yangtze River') > 0;

    O plano de execução é o seguinte. Ele contém o campo Fulltext Filter

    QUERY PLAN
    Gather  (cost=0.00..1.00 rows=1 width=12)
      ->  Local Gather  (cost=0.00..1.00 rows=1 width=12)
            ->  Index Scan using Clustering_index on wiki_articles  (cost=0.00..1.00 rows=1 width=12)
                  Fulltext Filter: (text_search(content, search_expression => 'Yangtze River'::text, mode => match, operator => OR, tokenizer => jieba, analyzer_params => {"filter":["removepunct","lowercase",{"stop_words":["_english_"],"type":"stop"},{"language":"english","type":"stemmer"}],"tokenizer":{"hmm":true,"mode":"search","type":"jieba"}}, options => ) > '0'::double precision)
    Query Queue: init_warehouse.default_queue
    Optimizer: HQO version 4.0.0

    Recommendations

    Rebuild indexes using Serverless resources

    Some property changes trigger compaction and index rebuilding, which can spike CPU usage. Handle these changes as follows:

    Changes to `bitmap_columns`, `dictionary_encoding_columns`, or vector indexes

    Use a sintaxe REBUILD com recursos do Serverless Computing em vez de ALTER TABLE ... SET. For more information, see REBUILD

    ASYNC REBUILD TABLE <table_name>
    WITH (
        rebuild_guc_hg_computing_resource = 'serverless'
    )
    SET (
        bitmap_columns = '<col1>,<col2>',
        dictionary_encoding_columns = '<col1>:on,<col2>:off',
        vectors = '{
        "<col_vector>": {
            "algorithm": "HGraph",
            "distance_method": "Cosine",
            "builder_params": {
                "base_quantization_type": "rabitq",
                "graph_storage_type": "compressed",
                "max_degree": 64,
                "ef_construction": 400,
                "precise_quantization_type": "fp32",
                "use_reorder": true,
                "max_total_size_to_merge_mb": 4096
            }
        }
        }'
    );

    Alterações no armazenamento colunar para dados JSON ou colunas de índice de texto completo

    A sintaxe REBUILD ainda não é suportada para essas alterações. Use uma tabela temporária em vez disso:

    BEGIN;
    -- Clean up any existing temporary table
    DROP TABLE IF EXISTS <table_new>;
    -- Create a temporary table with the same structure
    SET hg_experimental_enable_create_table_like_properties = on;
    CALL HG_CREATE_TABLE_LIKE ('<table_new>', 'select * from <table>');
    COMMIT;
    
    -- Apply the new column properties to the temporary table
    ALTER TABLE <table_new> ALTER COLUMN <column_name> SET (enable_columnar_type = ON);
    CREATE INDEX <idx_name> ON <table_new> USING FULLTEXT (column_name);
    
    -- Insert data using Serverless resources (index building completes synchronously)
    SET hg_computing_resource = 'serverless';
    INSERT INTO <table_new> SELECT * FROM <table>;
    ANALYZE <table_new>;
    
    BEGIN;
    -- Replace the original table with the temporary table
    DROP TABLE IF EXISTS <table>;
    ALTER TABLE <table_new> RENAME TO <table>;
    COMMIT;

    Other property changes (e.g., `distribution_key`, `clustering_key`, `segment_key`, storage format)

    Use the REBUILD syntax with Serverless Computing resources.

    Operações avançadas: Personalizar configurações de tokenizer

    O Hologres recomenda o uso da configuração padrão do tokenizer. No entanto, se a configuração padrão de um índice invertido de texto completo não atender às suas necessidades, você pode personalizar o tokenizer para uma tokenização mais flexível.

    Requisitos de analyzer_params

    O parâmetro analyzer_params deve atender aos seguintes requisitos:

    • Deve ser uma cadeia de caracteres JSON.

    • O objeto JSON de nível superior suporta duas chaves: tokenizer and filter. Elas são configuradas da seguinte forma:

      • filter: Opcional. Um array JSON usado para configurar filtros. Múltiplos filtros são aplicados na ordem especificada.

      • tokenizer: Obrigatório. Um objeto JSON que configura as propriedades do tokenizer. Este objeto JSON suporta as seguintes chaves:

        • type: Obrigatório. O nome do tokenizer.

        • Os parâmetros do objeto tokenizer variam conforme o tokenizer. Para detalhes, consulte a tabela a seguir:

          Tokenizer

          Parameter


          Descrição

          Valor

          jieba

          mode

          O modo de tokenização.

          • search (padrão): Lista múltiplas combinações possíveis de tokens, permitindo redundância.

          • exact: Não realiza divisão redundante.

          hmm

          Determina se deve usar um Modelo Oculto de Markov para identificar palavras que não estão no dicionário. Esse recurso melhora a identificação de novas palavras.

          • true (padrão): Usa o modelo.

          • false: Não usa o modelo.

          standard

          max_token_length

          O comprimento máximo do token.

          Um inteiro positivo. O valor padrão é 255. Se um token exceder esse comprimento, ele será dividido em intervalos de max_token_length.

          ik

          mode

          O modo de tokenização.

          • ik_max_word (padrão): Tokenização de granularidade fina que gera todas as palavras curtas possíveis.

          • ik_smart: Um modo de tokenização de granularidade grossa que prioriza palavras mais longas para reduzir o número de tokens. Os tokens de saída não se sobrepõem. Esse modo tenta combinar numerais e palavras de medida em um único token.

          enable_lowercase

          Determina se deve converter tokens para minúsculas.

          • true (default)

          • false

          ngram

          min_ngram

          O comprimento mínimo de caracteres de um token.

          Um número positivo. O padrão é 1. A diferença máxima permitida em relação a max_ngram é 3.

          Nota: Você pode ajustar a diferença máxima definindo o seguinte GUC, por exemplo, SET hg_fulltext_index_max_ngram_diff = 5;

          max_ngram

          O comprimento máximo de caracteres de um token.

          Um número positivo. O padrão é 2. O valor deve estar no intervalo [1, 255]. A diferença máxima permitida em relação a min_ngram is 3.

          Nota

          A large difference between max_ngram and min_ngram causes the ngram tokenizer to generate many tokens, increasing resource consumption, storage, e index build time.

          prefix_only

          Determina se deve gerar apenas n-gramas de prefixo.

          • true

          • false (default)

          pinyin

          keep_first_letter

          Determina se deve manter a primeira letra de cada caractere chinês.

          • true (padrão): Mantém as iniciais do pinyin.

          • false: Não mantém a primeira letra.

          keep_separate_first_letter

          Determina se deve manter a primeira letra de cada caractere chinês como um token separado.

          • true: Mantém a inicial de cada caractere.

          • false (padrão): Não mantém como tokens separados.

          limit_first_letter_length

          O comprimento máximo do token que contém as primeiras letras combinadas.

          Um inteiro. O valor padrão é 16.

          keep_full_pinyin

          Determina se deve manter o Pinyin completo de cada caractere chinês.

          • true (padrão): O pinyin é mantido.

          • false: Não mantém o Pinyin completo.

          keep_joined_full_pinyin

          Determina se deve unir o Pinyin completo de cada caractere chinês em um único token.

          • true: Ativa a concatenação.

          • false (padrão): Não une o Pinyin.

          keep_none_chinese

          Determina se deve manter letras ou números não chineses no resultado.

          • true (padrão): Mantém.

          • false: Não mantém.

          keep_none_chinese_together

          Determina se deve manter letras ou números não chineses consecutivos juntos como um único token.

          • true (padrão): Mantém as sequências de letras e dígitos juntas.

          • false: Não preserva a forma original.

          Nota

          Esse parâmetro tem efeito apenas quando keep_none_chinese está definido como true

          keep_none_chinese_in_first_letter

          Determina se deve manter letras ou números não chineses no token de primeira letra.

          • true (padrão): Mantém o token.

          • false: Não mantém.

          keep_none_chinese_in_joined_full_pinyin

          Determina se deve manter letras ou números não chineses no token de Pinyin completo unido.

          • true: Mantém o token.

          • false (padrão): Não mantém.

          none_chinese_pinyin_tokenize

          Determina se deve dividir letras não chinesas em termos Pinyin separados, caso formem Pinyin válido.

          • true (padrão): Divide.

          • false: Não divide.

          Nota

          Esse parâmetro tem efeito apenas quando keep_none_chinese and keep_none_chinese_together are set to true

          keep_original

          Determina se deve manter a entrada original.

          • true: Mantém a entrada original.

          • false (padrão): Não mantém a entrada original.

          lowercase

          Determina se deve converter letras não chinesas para minúsculas.

          • true (default)

          • false

          trim_whitespace

          Determina se deve remover caracteres de espaço em branco.

          • true (default)

          • false

          remove_duplicated_term

          Determina se deve remover termos duplicados.

          • true: Remove termos duplicados.

          • false (padrão): Não remove duplicados.

          keep_separate_chinese

          Determina se deve manter caracteres chineses individuais como tokens separados.

          • true: Mantém os caracteres.

          • false (padrão): Não mantém.

    analyzer_params padrão

    A tabela a seguir mostra a configuração padrão de analyzer_params

    Tokenizer

    Padrão analyzer_params

    jieba (tokenizer padrão)

    {
      "tokenizer": {
        "type": "jieba", 
        "mode": "search",
        "hmm": true
      }, 
      "filter": [
        "removepunct",
        "lowercase",
        {"type": "stop", "stop_words": ["_english_"]},
        {"type": "stemmer", "language": "english"}
      ]
    }

    whitespace

    {
      "tokenizer": {
        "type": "whitespace"
      }
    }

    keyword

    {
      "tokenizer": {
        "type": "keyword"
      }
    }

    simple

    {
      "tokenizer": {
        "type": "simple"
      }, 
      "filter": [
        "lowercase"
      ]
    }

    standard

    {
      "tokenizer": {
        "type": "standard",
        "max_token_length": 255
      }, 
      "filter": [
        "lowercase"
      ]
    }

    icu

    {
      "tokenizer": {
        "type": "icu"
      }, 
      "filter": [
        "removepunct",
        "lowercase"
      ]
    }

    ik

    {
      "tokenizer": {
        "type": "ik",
        "mode": "ik_max_word",
        "enable_lowercase": true
      },
      "filter": [
        {"type": "stop", "stop_words": ["_english_"]},
        {"type": "stemmer", "language": "english"}
      ]
    }

    ngram

    {
      "tokenizer": {
        "type": "ngram",
        "min_gram": 1,
        "max_gram": 2,
        "prefix_only": false
      }
    }

    pinyin

    {
      "tokenizer": {
        "type": "pinyin",
        "keep_first_letter": true,
        "keep_separate_first_letter": false,
        "keep_full_pinyin": true,
        "keep_joined_full_pinyin": false,
        "keep_none_chinese": true,
        "keep_none_chinese_together": true,
        "none_chinese_pinyin_tokenize": true,
        "keep_original": false,
        "limit_first_letter_length": 16,
        "lowercase": true,
        "trim_whitespace": true,
        "keep_none_chinese_in_first_letter": true,
        "keep_none_chinese_in_joined_full_pinyin": false,
        "remove_duplicated_term": false,
        "ignore_pinyin_offset": true,
        "fixed_pinyin_offset": false,
        "keep_separate_chinese": false
      }
    }

    Configuração de filter

    O Hologres suporta os seguintes filtros em analyzer_params.

    Nota

    Múltiplos filtros são aplicados na ordem especificada.

    Filtro

    Descrição

    Formato do parâmetro

    Exemplo de uso

    lowercase

    Converte letras maiúsculas em um token para minúsculas.

    Use o nome do filtro como uma cadeia de caracteres.

    "lowercase"
    • Definição do filtro

      "filter": ["lowercase"]
    • Resultado do filtro

      ["Hello", "WORLD"] -> ["hello", "world"]

    stop

    Remove tokens de palavras de parada (stop words).


    stop_words: Uma lista de palavras de parada. A lista deve conter apenas cadeias de caracteres. Você pode fornecer uma lista personalizada ou usar um dos seguintes dicionários integrados para idiomas específicos:

    "_english_"
    "_danish_"
    "_dutch_"
    "_finnish_"
    "_french_"
    "_german_"
    "_hungarian_"
    "_italian_"
    "_norwegian_"
    "_portuguese_"
    "_russian_"
    "_spanish_"
    "_swedish_"
    • Definição do filtro

      "filter": [{
        "type": "stop",
        "stop_words": ["_english_", "cat"]
      }]
    • Resultado do filtro

      ["the", "cat", "is", "on", "a", "mat"] -> ["mat"]

      Nota

      A palavra "cat" é uma stop word personalizada; "the", "is", "on" e "a" são da lista de stop words integrada _english_.

    stemmer

    Reduz tokens à sua forma raiz (radical) com base nas regras gramaticais de um idioma especificado.

    language: O idioma. Os seguintes idiomas integrados são suportados.

    "arabic",
    "danish",
    "dutch",
    "english",
    "finnish",
    "french",
    "german",
    "greek",
    "hungarian",
    "italian",
    "norwegian",
    "portuguese",
    "romanian",
    "russian",
    "spanish",
    "swedish",
    "tamil",
    "turkish"
    • Definição do filtro

      "filter": [{
        "type": "stemmer",
        "language": "english"
      }]
    • Resultado do filtro

      ["machine", "learning"] -> ["machin", "learn"]

    length

    Remove tokens que excedem um comprimento especificado.

    max: O comprimento máximo. O valor deve ser um inteiro positivo.

    {"type": "length", "max": 10}
    • Definição do filtro

      "filter": [{"type": "length", "max": 10}]
    • Resultado do filtro

      ["AI", "for", "Artificial", "Intelligence"] -> ["AI", "for", "Artificial"]

    removepunct

    Remove tokens que consistem apenas em caracteres de pontuação.

    Use o nome do filtro como uma cadeia de caracteres.

    "removepunct"
    Nota

    A partir da V4.0.8, o removepunct suporta o parâmetro mode

    • if_all (padrão): Remove um token apenas se todos os seus caracteres forem pontuação.

    • if_any: Remove um token se ele contiver qualquer caractere de pontuação.

    • Definição do filtro

      "filter": ["removepunct"]
      Nota

      Isso é equivalente a "filter": [{"type": "removepunct", "mode": "if_all"}]

    • Resultado do filtro

      ["Chinese", "english", "Chinese.", "english.", "124", "124!=8", ".", ",", ",,", " ..."]->["Chinese", "english", "Chinese.", "english.", "124", "124!=8"]

      "filter": [{"type": "removepunct", "mode": "if_any"}]

      ["Chinese", "english", "Chinese.", "english.", "124", "124!=8", ".", ",", ",,", " ..."] -> ["Chinese", "english", "124"]

    pinyin

    Fornece filtragem de tokens específica para Pinyin.

    {
      "type": "pinyin",
      "keep_first_letter": true,
      "keep_separate_first_letter": false,
      "keep_full_pinyin": true,
      "keep_joined_full_pinyin": false,
      "keep_none_chinese": true,
      "keep_none_chinese_together": true,
      "none_chinese_pinyin_tokenize": true,
      "keep_original": false,
      "limit_first_letter_length": 16,
      "lowercase": true,
      "trim_whitespace": true,
      "keep_none_chinese_in_first_letter": true,
      "keep_none_chinese_in_joined_full_pinyin": false,
      "remove_duplicated_term": false,
      "ignore_pinyin_offset": true,
      "fixed_pinyin_offset": false,
      "keep_separate_chinese": false
    }

    Usa as mesmas propriedades do tokenizer Pinyin.