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
ALTERpara 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])";ImportanteA modificação do
COMMENTpode acionar a reconstrução do índice invertido. Em tabelas grandes, execute essa operação em horários de menor movimento. -
Use
ALTERpara 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
typevalorDescriçã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.
NotaEste 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 completo2: 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 array2: Modo chave-valor, por exemplo".id"e"[].id".
type=2, 3, 4score
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 emMATCH... AGAINST.
NotaEste 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 sistemaimci_fts_build_segment_sizeOutros 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 sistemaimci_fts_build_packcnt_minOutros 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 sistemaimci_fts_build_packcnt_maxOutros 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
NotaEste 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úsculas2: Determinado pelocollateda coluna (modo compatível com MySQL)3: Determinado pelocollateda coluna (determinado inteiramente pelocollate)
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
NotaEste 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 consulta2: Com suporte, modo de índice (requer a reconstrução do índice invertido)
NotaEste 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.
-
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'; -
(Opcional) Modifique o índice de texto completo: use a instrução
ALTER TABLEpara adicionar um índice de texto completo à colunatitlee especifique o modo de mecanismo de pesquisa do tokenizadorjieba.ALTER TABLE t1 MODIFY title VARCHAR(32) COMMENT "imci_fts(type=2,mode=0)"; -
(Opcional) Verifique o resultado da tokenização: antes de selecionar um tokenizador, use a função
dbms_imci.fts_tokenizepara 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.
-
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
EXPLAINpara visualizar o plano de execução. O operadorFtsTableScanindica 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%") | +----+------------------------+------+-----------------------------------------------------------------+Fallbackindica que o sistema usa automaticamenteLIKEpara realizar uma varredura suplementar em dados incrementais ainda não indexados, garantindo a integridade dos resultados. -
Acelere consultas
LIKE: para manter a compatibilidade com o código de negócio existente, o IMCI converte automaticamente consultasLIKEespecíficas emMATCH...AGAINSTpara 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 consultaLIKE. -
Conversão de
matchparalike: quando não há índice de texto completo disponível, o IMCI pode converterMATCHemLIKEpara 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.
-
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]'; -
Exclua um índice de texto completo: caso não precise mais do índice de texto completo em uma coluna, modifique o
COMMENTda 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.
|
imci_enable_fts_query | Global / Sessão | Indica se é possível usar índices invertidos em nós colunares.
|
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.
|
imci_convert_like_to_match | Global / Sessão | Especifica se a conversão de
|
imci_enable_query_fts_like | Global / Sessão | Especifica se a conversão de
|
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.
|
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:
|
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:
|
imci_fts_user_dict_update | Global | Especifica se o recarregamento do dicionário personalizado especificado por
Nota Este parâmetro se aplica apenas às seguintes versões:
|
imci_convert_json_overlap_to_match | Global/Sessão | Especifica se o
|
imci_convert_json_contains_to_match | Global/Sessão | Especifica se o
|
imci_convert_json_extract_to_match | Global/Sessão | Especifica se o
|
imci_convert_equal_to_match | Global/Sessão | Especifica se a expressão
|
imci_convert_in_to_match | Global/Sessão | Especifica se a expressão
|
imci_convert_ne_to_match | Global/Sessão | Especifica se a expressão
|
imci_enable_fts_synonym | Global / Sessão | Especifica se há suporte para sinônimos.
Nota Este parâmetro está disponível apenas nas seguintes versões:
|
imci_enable_fts_parse_term_with_and | Global / Sessão | Especifica se a string de consulta tokenizada é avaliada com
|
imci_enable_fts_parse_term_with_phrase | Global / Sessão | Especifica se, no modo
|
imci_fts_stop_word_table | Global | As palavras de parada personalizadas para o índice de texto completo. Formato: Nota Este parâmetro está disponível apenas nas seguintes versões:
|
imci_fts_stop_word_update | Global | Especifica se o recarregamento das palavras de parada personalizadas especificadas por
Nota Este parâmetro está disponível apenas nas seguintes versões:
|
imci_fts_synonym_table | Global | Os sinônimos personalizados para o índice de texto completo. Formato: Nota Este parâmetro está disponível apenas nas seguintes versões:
|
imci_fts_synonym_update | Global | Especifica se o recarregamento dos sinônimos personalizados especificados por
Nota Este parâmetro está disponível apenas nas seguintes versões:
|
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
-
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'; -
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_fts_dict VALUES(2, "PolarDB", 1) -
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_tablejá estiver definido, definaimci_fts_user_dict_updatecomo ON para acionar o recarregamento do dicionário personalizado especificado porimci_fts_user_dict_table.SET GLOBAL imci_fts_user_dict_update = ON;NotaUm 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.
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.0indica 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".1indica 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;
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.
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;
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) outype=3(ik).Recuperação de conteúdo JSON: use
type=4(json) junto com o parâmetroexprpara 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?
Verifique se
SET imci_enable_fts_query = ON;foi executado. Essa é a causa mais comum.Verifique a saída do
EXPLAINpara confirmar a presença do operadorFtsTableScan. 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, useMATCH...AGAINST.