Este tema describe cómo compilar y usar índices de texto completo en el In-Memory Column Index (IMCI) de PolarDB for MySQL. Configure un índice invertido mediante un COMMENT a nivel de columna para lograr búsquedas aproximadas en milisegundos con la sintaxis MATCH...AGAINST o con consultas LIKE optimizadas automáticamente. Esta función se basa en el mecanismo de índice invertido y coincidencia de términos de IMCI. Para obtener más detalles sobre su funcionamiento, consulte An analysis of the full-text search feature in IMCI.
Alcance
La versión de su clúster debe cumplir los siguientes requisitos:
MySQL 8.0.1, y la versión secundaria del motor debe ser 8.0.1.1.52 o posterior.
MySQL 8.0.2, y la versión secundaria del motor debe ser 8.0.2.2.32 o posterior.
Sintaxis
PolarDB IMCI le permite crear, modificar o eliminar un índice invertido. Para ello, especifique un comment de columna al crear una tabla, o bien modifique el comment de la columna mediante DDL.
Formato de sintaxis
-
Defina un índice de texto completo al crear una tabla:
CREATE TABLE table_name ( column_name Data_Type COMMENT "imci_fts(type=VALUE [,KEY=VALUE])" ) COMMENT 'columnar=1'; -
Utilice
ALTERpara modificar una columna y agregar o cambiar un índice:ALTER TABLE table_name MODIFY column_name Data_Type COMMENT "imci_fts(type=VALUE [,KEY=VALUE])";ImportanteModificar
COMMENTpuede desencadenar la recompilación del índice invertido. En tablas grandes, ejecute esta operación fuera del horario de mayor actividad. -
Use
ALTERpara modificar una columna y eliminar el índice:ALTER TABLE table_name MODIFY column_name Data_Type COMMENT 'imci_fts(enable=0)';
Parámetros:
En el COMMENT a nivel de tabla, establezca 'columnar=1' para crear una tabla columnar de IMCI. El índice de texto completo se configura mediante el COMMENT de la columna, con el formato imci_fts(TYPE=VALUE[, KEY=VALUE]...). El parámetro TYPE es obligatorio y KEY es opcional. Separe varios valores de KEY con comas.
-
Tipo de tokenizer (parámetro
type):Tokenizer
typevalorDescripción
token
0 (predeterminado)
Divide el texto en tokens mediante espacios, signos de puntuación y otros caracteres no alfanuméricos. Recomendado para inglés o texto con formato.
ngram
1
Divide los caracteres en segmentos de longitud fija (controlada por el parámetro
len). Adecuado para coincidencias aproximadas en cualquier idioma.jieba
2
Tokenizer para chino basado en diccionario. Diseñado para escenarios de búsqueda semántica en chino.
ik
3
Otro tokenizer de uso común para chino.
json
4
Compila un índice a partir del contenido extraído de un campo JSON mediante una expresión JSONPath (requiere el parámetro
expr).whole
5
No divide el texto en tokens. Trata todo el valor de la columna como un solo término. Se usa principalmente para acelerar consultas de igualdad (como = o in).
mysql ngram
6
El tokenizer ngram compatible con MySQL.
NotaEste parámetro aplica únicamente a las siguientes versiones:
MySQL 8.0.1, y la versión secundaria del motor debe ser 8.0.1.1.57 o posterior.
MySQL 8.0.2, y la versión secundaria del motor debe ser 8.0.2.2.37 o posterior.
-
Descripción de los parámetros de configuración (
KEY-VALUE):Nombre del parámetro (KEY)
Valor predeterminado
Descripción del valor
Tipos de tokenizer aplicables (
type)enable
1
1: crea el índice invertido (valor predeterminado)0: elimina el índice invertido
Todos
type
0
Especifica el tipo de tokenizer (consulte la tabla anterior)
Todos
len
-
Tokenizer
ngram: longitud de tokenización. Valores válidos:[1, 256)type=1(ngram),type=6(mysql ngram)mode
0
Modo del tokenizer:
jieba (
type=2):0: modo exacto (predeterminado)1: modo completo2: modo de motor de búsqueda
ik (
type=3):0: modo inteligente (predeterminado)1: modo de granularidad más fina
json (
type=4):0: modo de arreglo heredado (predeterminado)1: modo de arreglo2: modo de clave-valor, por ejemplo".id"y"[].id".
type=2, 3, 4score
0
Indica si se admite la ordenación:
0: no genera estadísticas de frecuencia de términos (TF) ni de frecuencia de documentos (DF), e ignora la ordenación (predeterminado)1: habilitado. Admite la ordenación por puntuación de relevancia basada enMATCH... AGAINST.
NotaEsta función solo está disponible en las siguientes versiones:
MySQL 8.0.1, y la versión secundaria del motor debe ser 8.0.1.1.57 o posterior.
MySQL 8.0.2, y la versión secundaria del motor debe ser 8.0.2.2.37 o posterior.
Todos
seg_size
0
Especifica el tamaño de segmento del índice invertido:
0: utiliza el valor de la variable del sistemaimci_fts_build_segment_sizeOtros valores: especifique un tamaño de segmento concreto
Todos
pack_cnt_min
0
Número mínimo de unidades de datos para compilar el índice invertido:
0: utiliza el valor de la variable del sistemaimci_fts_build_packcnt_minOtros valores: especifique un tamaño de segmento concreto
Todos
pack_cnt_max
0
Número máximo de unidades de datos para compilar el índice invertido:
0: utiliza el valor de la variable del sistemaimci_fts_build_packcnt_maxOtros valores: especifique un tamaño de segmento concreto
Todos
stop_word
0
Indica si se admiten palabras vacías:
0: no admitido (predeterminado)1: admitido
NotaEsta función solo está disponible en las siguientes versiones:
MySQL 8.0.1, y la versión secundaria del motor debe ser 8.0.1.1.57 o posterior.
MySQL 8.0.2, y la versión secundaria del motor debe ser 8.0.2.2.37 o posterior.
Todos
case_sensitive
0
Indica si el índice distingue entre mayúsculas y minúsculas:
0: no distingue entre mayúsculas y minúsculas (predeterminado)1: distingue entre mayúsculas y minúsculas2: determinado por elcollatede la columna (modo compatible con MySQL)3: determinado por elcollatede la columna (definido completamente porcollate)
Todos
phrase
0
Indica si se registra información de posición para consultas de frases:
0: no registra información de posición (predeterminado)1: registra información de posición
NotaEste parámetro aplica únicamente a las siguientes versiones:
MySQL 8.0.1, y la versión secundaria del motor debe ser 8.0.1.1.57 o posterior.
MySQL 8.0.2, y la versión secundaria del motor debe ser 8.0.2.2.37 o posterior.
Todos
synonym
0
Indica si se admiten sinónimos:
0: no admitido (predeterminado)1: admitido, modo de consulta2: admitido, modo de índice (requiere recompilar el índice invertido)
NotaEsta función solo está disponible en las siguientes versiones:
MySQL 8.0.1, y la versión secundaria del motor debe ser 8.0.1.1.57 o posterior.
MySQL 8.0.2, y la versión secundaria del motor debe ser 8.0.2.2.37 o posterior.
Todos
Ejemplos
1. Crear un índice de texto completo
Cree un índice de texto completo en cada columna que requiera recuperación de texto y seleccione un tokenizer según sus necesidades de negocio.
-
Crear una tabla de prueba: cree una tabla que contenga un índice columnar.
CREATE TABLE t1 ( id INT PRIMARY KEY, title VARCHAR(32) COMMENT "imci_fts(type=2)" )CHARSET utf8mb4 COMMENT 'columnar=1'; -
(Opcional) Modificar el índice de texto completo: utilice la instrucción
ALTER TABLEpara agregar un índice de texto completo a la columnatitley especifique el modo de motor de búsqueda del tokenizerjieba.ALTER TABLE t1 MODIFY title VARCHAR(32) COMMENT "imci_fts(type=2,mode=0)"; -
(Opcional) Comprobar el resultado de la tokenización: antes de seleccionar un tokenizer, use la función
dbms_imci.fts_tokenizepara previsualizar cómo procesan el texto los distintos tokenizers.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. Ejecutar consultas de búsqueda de texto completo
Una vez creado el índice, IMCI lo compila en segundo plano. Cuando finaliza la compilación, ejecute consultas de texto mediante instrucciones MATCH...AGAINST o LIKE optimizadas.
-
Consultar con
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");Utilice
EXPLAINpara consultar el plan de ejecución. Ahí observará el operadorFtsTableScan, que indica que la consulta utilizó el í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, para los datos incrementales aún no indexados, el sistema utiliza automáticamenteLIKEpara ejecutar un escaneo complementario. Esto garantiza que los resultados sean completos. -
Acelerar consultas
LIKE: para mantener la compatibilidad con el código de negocio existente, IMCI convierte automáticamente ciertas consultasLIKEenMATCH...AGAINSTy así acelerarlas.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%") | +----+------------------------+------+-----------------------------------------------------------------+El plan de ejecución también muestra el operador
FtsTableScan, lo cual confirma que la consultaLIKEse aceleró. -
Conversión de
matchalike: cuando no hay ningún índice de texto completo disponible, IMCI convierteMATCHenLIKEpara que la consulta se ejecute correctamente y aproveche al máximo los índices existentes. El plan de ejecución muestra un escaneo completo de la tabla.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. Gestionar y supervisar índices
Consulte el estado de compilación y los metadatos de un índice, y elimínelo cuando ya no lo necesite.
-
Supervise el progreso y el estado de compilación del í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]'; -
Eliminar un índice de texto completo: si ya no necesita el índice de texto completo de una columna, modifique el
COMMENTde dicha columna para eliminarlo.ALTER TABLE t1 MODIFY title VARCHAR(255) COMMENT 'imci_fts(enable=0)';
4. Parámetros de configuración principales
Nombre del parámetro | Nivel | Descripción |
imci_enable_fts | Global | Indica si se pueden crear índices invertidos en los nodos columnares.
|
imci_enable_fts_query | Global / Session | Indica si se pueden usar índices invertidos en los nodos columnares.
|
imci_fts_build_pack_cnt_min | Global | Número mínimo de bloques de datos columnares para cada índice invertido durante la compilación del índice. Valores válidos: de 0 a 8192. Valor predeterminado: 8. El valor 0 indica que el índice no se compila por el momento. |
imci_fts_build_pack_cnt_max | Global | Número máximo de bloques de datos columnares para cada índice invertido durante la compilación del índice. Valores válidos: de 0 a 8192. Valor predeterminado: 128. |
imci_fts_build_segment_size | Global | Tamaño del segmento de cada índice invertido durante la compilación del índice. Valores válidos: de 0 a 4294967295. Valor predeterminado: 536870912 (512 MB). Unidad: bytes. |
imci_fts_lru_cache_capacity | Global | Espacio de caché del diccionario para los índices invertidos. Valores válidos: [DBNodeClassMemory1/10~DBNodeClassMemory1/2]. Valor predeterminado: [DBNodeClassMemory*10/100]. |
imci_enable_fts_pruner | Global / Session | Indica si se habilita la optimización de prefiltro del índice invertido.
|
imci_convert_like_to_match | Global / Session | Indica si se convierte
|
imci_enable_query_fts_like | Global / Session | Indica si se convierte
|
imci_enable_match_expr_fallback | Global / Session | Indica si se habilitan las consultas sobre datos incrementales que aún no se han compilado en el índice invertido.
|
imci_fts_build_fts_cnt | Global | Nivel de concurrencia para la compilación de índices invertidos. Valores válidos: de 0 a 512. Valor predeterminado: 4. Nota Este parámetro solo aplica a las siguientes versiones:
|
imci_fts_user_dict_table | Global | Diccionario personalizado para el índice de texto completo. Formato: database_name/table_name. Nota Este parámetro solo aplica a las siguientes versiones:
|
imci_fts_user_dict_update | Global | Indica si se vuelve a cargar el diccionario personalizado especificado mediante
Nota Este parámetro solo aplica a las siguientes versiones:
|
imci_convert_json_overlap_to_match | Global/Session | Indica si se permite que
|
imci_convert_json_contains_to_match | Global/Session | Indica si se permite que
|
imci_convert_json_extract_to_match | Global/Session | Indica si se permite que
|
imci_convert_equal_to_match | Global/Session | Indica si se permite que la expresión
|
imci_convert_in_to_match | Global/Session | Indica si se permite que la expresión
|
imci_convert_ne_to_match | Global/Session | Indica si se permite que la expresión
|
imci_enable_fts_synonym | Global / Session | Indica si se admiten sinónimos.
Nota Este parámetro solo está disponible en las siguientes versiones:
|
imci_enable_fts_parse_term_with_and | Global / Session | Indica si la cadena de consulta tokenizada se evalúa mediante
|
imci_enable_fts_parse_term_with_phrase | Global / Session | Indica si, en
|
imci_fts_stop_word_table | Global | Palabras vacías personalizadas para el índice de texto completo. Formato: Nota Este parámetro solo está disponible en las siguientes versiones:
|
imci_fts_stop_word_update | Global | Indica si se vuelven a cargar las palabras vacías personalizadas especificadas mediante
Nota Este parámetro solo está disponible en las siguientes versiones:
|
imci_fts_synonym_table | Global | Sinónimos personalizados para el índice de texto completo. Formato: Nota Este parámetro solo está disponible en las siguientes versiones:
|
imci_fts_synonym_update | Global | Indica si se vuelven a cargar los sinónimos personalizados especificados mediante
Nota Este parámetro solo está disponible en las siguientes versiones:
|
Los parámetros de nivel GLOBAL no se pueden modificar directamente desde la línea de comandos. Solo es posible configurarlos en la consola. Cuando se ejecuta uno de estos parámetros desde la línea de comandos, la operación se trata de forma predeterminada como una operación de nivel SESSION.
Diccionarios personalizados
La función de índice de texto completo de IMCI admite diccionarios personalizados implementados mediante tablas personalizadas. Estos diccionarios generan resultados de tokenización que se ajustan mejor a sus escenarios de negocio.
Crear una tabla de diccionario personalizado
-
Primero, defina una tabla con la misma estructura que la tabla my_fts_dict. Los nombres de las columnas deben coincidir con los de dicha tabla.
type: el tipo de tokenizer. Solo se admiten el tokenizer jieba (tipo 2) y el tokenizer ik (tipo 3).
word: la palabra de la entidad.
is_added: agrega al diccionario personalizado (valor 1) o lo quita de este (valor 2).
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'; -
El diccionario personalizado es una tabla InnoDB. Las operaciones de lectura y escritura son iguales a las de una tabla normal.
-
Agregar una entrada:
INSERT INTO my_fts_dict VALUES(2, "PolarDB", 1) -
Quitar una 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";
-
Configurar un diccionario personalizado
-
Después de crear la tabla del diccionario personalizado, configure el valor de la opción
imci_fts_user_dict_table. Por ejemplo,test/my_fts_dict'.SET GLOBAL imci_fts_user_dict_table = 'test/my_fts_dict'; -
Si ya se estableció
imci_fts_user_dict_table, también puede establecerimci_fts_user_dict_updateen ON para activar la recarga del diccionario personalizado indicado enimci_fts_user_dict_table.SET GLOBAL imci_fts_user_dict_update = ON;NotaUn diccionario personalizado nuevo solo surte efecto en los índices invertidos que se compilen después. Para aplicarlo a un índice invertido ya compilado, vuelva a compilar el índice.
Sinónimos personalizados
La función de índice de texto completo de IMCI admite sinónimos personalizados implementados mediante tablas personalizadas.
La función de sinónimos personalizados solo aplica a las siguientes versiones:
MySQL 8.0.1, y la versión secundaria del motor debe ser 8.0.1.1.57 o posterior.
MySQL 8.0.2, y la versión secundaria del motor debe ser 8.0.2.2.37 o posterior.
Crear una tabla de sinónimos personalizados
Primero, defina una tabla con la misma estructura que la tabla my_synonym_dict. Los nombres de las columnas deben coincidir con los de my_synonym_dict.
word: la lista de sinónimos. Separe las distintas palabras con comas.-
type: el tipo de sinónimo.0indica que todas las palabras de la lista son sinónimas entre sí. Por ejemplo,"db,database,polardb"significa"db" <=> "database" <=> "polardb". Es decir, cuando busca"db","database"o"polardb", se devuelven todos los datos que coinciden con"db","database"o"polardb".1indica que la primera palabra de la lista es el término principal y que las demás son sus sinónimos. Por ejemplo,"db,database,polardb"significa"db" => "database", "polardb". Es decir, cuando busca"db", se devuelven todos los datos que coinciden con"db","database"o"polardb". Sin embargo, cuando busca"database", solo se devuelven los datos que coinciden con"database".
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';
El diccionario personalizado es una tabla InnoDB. Las operaciones de lectura y escritura son iguales a las de una tabla normal.
-
Agregar una entrada:
INSERT INTO my_synonym_dict VALUES("db,database,polardb", 0); INSERT INTO my_synonym_dict VALUES("imci,clickhouse,duckdb", 1); -
Quitar una entrada:
DELETE FROM my_synonym_dict WHERE type=1 AND word = "imci,clickhouse,duckdb";
Configurar sinónimos personalizados
Después de crear la tabla de sinónimos personalizados, configure el valor de la opción imci_fts_synonym_table. Por ejemplo, test/my_synonym_dict, donde test es el nombre de la base de datos y my_synonym_dict es el nombre de la tabla.
SET GLOBAL imci_fts_synonym_table = 'test/my_synonym_dict';
Si ya se estableció imci_fts_synonym_table, también puede establecer imci_fts_synonym_update en ON para activar la recarga de los sinónimos personalizados indicados en imci_fts_synonym_table.
SET GLOBAL imci_fts_synonym_update = ON;
Si synonym se establece en modo de índice (por ejemplo, COMMENT "imci_fts(type=0 synonym=1)"), los sinónimos actualizados solo surten efecto en la parte recién agregada del índice invertido. Para aplicarlos a todo el índice, vuelva a compilar el índice de texto completo.
Palabras vacías personalizadas
La función de índice de texto completo de IMCI admite palabras vacías personalizadas implementadas mediante tablas personalizadas.
La función de palabras vacías personalizadas solo aplica a las siguientes versiones:
MySQL 8.0.1, y la versión secundaria del motor debe ser 8.0.1.1.57 o posterior.
MySQL 8.0.2, y la versión secundaria del motor debe ser 8.0.2.2.37 o posterior.
Crear una tabla de palabras vacías personalizadas
Primero, defina una tabla con la misma estructura que la tabla my_stop_words. Los nombres de las columnas deben coincidir con los de my_stop_words.
word: la palabra vacía.is_added: agrega al diccionario personalizado (valor 1) o lo quita de este (valor 0).
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';
El diccionario personalizado es una tabla InnoDB. Las operaciones de lectura y escritura son iguales a las de una tabla normal.
-
Agregar una entrada:
INSERT INTO my_stop_words VALUES("am", 1); INSERT INTO my_stop_words VALUES("chinese", 1); -
Quitar una 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";
Configurar palabras vacías personalizadas
Después de crear la tabla de palabras vacías personalizadas, configure el valor de la opción imci_fts_stop_word_table. Por ejemplo, test/my_stop_words, donde test es el nombre de la base de datos y my_stop_words es el nombre de la tabla.
SET GLOBAL imci_fts_stop_word_table = 'test/my_stop_words';
Si ya se estableció imci_fts_stop_word_table, también puede establecer imci_fts_stop_word_update en ON para activar la recarga de las palabras vacías personalizadas indicadas en imci_fts_stop_word_table.
SET GLOBAL imci_fts_stop_word_update = ON;
Un diccionario personalizado nuevo solo surte efecto en los índices invertidos que se compilen después. Para aplicarlo a un índice invertido ya compilado, vuelva a compilar el índice.
Preguntas frecuentes
P1: ¿Cómo selecciono el tokenizer adecuado?
Texto en inglés o con formato: use el tokenizer predeterminado
type=0(token), que divide el texto por espacios y signos de puntuación.Búsqueda precisa en chino: use el modo predeterminado de
type=2(jieba) o detype=3(ik).Recuperación de contenido JSON: use
type=4(json) junto con el parámetroexprpara especificar las rutas JSON que se van a indexar.Puede usar la función dbms_imci.fts_tokenize para previsualizar cómo procesan el texto los distintos tokenizers.
P2: ¿Por qué mi consulta no usa el índice de texto completo?
Compruebe que se haya ejecutado
SET imci_enable_fts_query = ON;. Esta es la causa más común.Revise la salida de
EXPLAINpara confirmar si está presente el operadorFtsTableScan. Si no aparece, es posible que el patrón de la consulta no coincida o que el sistema haya determinado que un escaneo completo de la tabla tiene un costo menor.
P3: ¿Cuál es la diferencia entre las consultas LIKE y MATCH...AGAINST?
LIKE '%keyword%'provoca un escaneo completo de la tabla cuando no existe un índice de texto completo, lo que genera un rendimiento deficiente. Incluso con la aceleración de IMCI, sus capacidades son limitadas.MATCH...AGAINSTes una sintaxis diseñada para la recuperación de texto completo. Ofrece un alto rendimiento y también admitirá funciones avanzadas, como consultas booleanas más complejas y ordenamiento por relevancia. Para aplicaciones nuevas, useMATCH...AGAINST.