Los diccionarios personalizados le permiten controlar cómo segmenta el texto AnalyticDB for MySQL en los índices de texto completo. Utilícelos para mantener intactos los términos específicos del dominio (entidades) o para excluir palabras frecuentes sin valor semántico (stop words). El flujo de trabajo consta de tres pasos: crear una tabla de diccionario, agregar entradas y vincular el diccionario a un índice de texto completo.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Permisos DDL y DML sobre el diccionario personalizado (obligatorios para crearlo o actualizarlo).
Permiso SELECT sobre el diccionario personalizado (obligatorio para utilizarlo en consultas).
Descripción general
Un diccionario personalizado es una tabla con dos columnas fijas: value (la palabra) y type (entidad o stop word). Dado que se comporta como una tabla estándar, se gestiona mediante las mismas operaciones SQL: INSERT para agregar palabras y DELETE para eliminarlas. Los cambios surten efecto de inmediato; cualquier dato que se escriba posteriormente en las tablas indexadas se segmentará con el diccionario actualizado.
Dos tipos de palabra controlan el comportamiento de la tokenización:
main: marca un término como entidad que el tokenizer no debe dividir. Utilice este tipo para términos específicos del dominio que la tokenización estándar separaría incorrectamente, como nombres de lugares y organizaciones en contextos generales, o marcas, productos y modelos en escenarios de comercio electrónico.stop: marca un término para excluirlo del índice. Utilice este tipo para palabras frecuentes que carecen de valor de búsqueda, comofromen escenarios de registros de auditoría SQL.
Las stop words requieren AnalyticDB for MySQL V3.1.4.24 o posterior. Para comprobar la versión de su clúster, inicie sesión en la consola de AnalyticDB for MySQL y vaya a la sección Configuration Information de la página Cluster Information. Para actualizar la versión, consulte Actualizar la versión menor de un clúster.
Límites
No se admiten cambios DDL en los diccionarios personalizados.
No se admiten las operaciones UPDATE ni TRUNCATE en los diccionarios personalizados.
Un diccionario personalizado debe utilizarse junto con un índice de texto completo.
Elimine el diccionario personalizado asociado antes de eliminar un índice de texto completo.
Cada clúster admite un diccionario personalizado de forma predeterminada. Póngase en contacto con el soporte técnico para crear diccionarios adicionales.
Cada diccionario admite hasta 10,000 entradas de forma predeterminada. Póngase en contacto con el soporte técnico para aumentar este límite.
Crear un diccionario personalizado
Sintaxis
CREATE TABLE [IF NOT EXISTS] table_name (
`value` VARCHAR NOT NULL COMMENT 'column_comment',
`type` VARCHAR NOT NULL [DEFAULT 'main|stop' COMMENT 'column_comment'],
PRIMARY KEY (`value`, `type`)
) COMMENT 'table_comment'
FULLTEXT_DICT = 'Y',
INDEX_ALL = 'Y|N'
Restricciones
Un diccionario personalizado solo puede contener las columnas
valueytype.Ambas columnas son de tipo VARCHAR y no pueden estar vacías.
La clave primaria debe incluir tanto
valuecomotype.
Parámetros
|
Parámetro |
Descripción |
|
|
Nombre de la tabla del diccionario. Debe tener entre 1 y 127 caracteres y puede contener letras, dígitos y guiones bajos ( |
|
|
Almacena la palabra. El nombre de la columna es fijo: |
|
|
Almacena el tipo de palabra. El nombre de la columna es fijo: |
|
|
Comentario para la columna o la tabla. |
|
|
Marca la tabla como tabla de diccionario. Establezca este valor en |
|
|
Especifica qué columnas se indexan. |
INDEX_ALL y motores de tabla:
La configuración correcta de INDEX_ALL depende del motor de tabla de su clúster:
Los clústeres anteriores a la versión V3.2.2.0 utilizan el motor XUANWU. El valor predeterminado de
INDEX_ALLesY. Utilice el valor predeterminado.-
Los clústeres V3.2.2.0 o posteriores pueden usar XUANWU_V2. Ejecute la siguiente sentencia para comprobarlo:
SHOW ADB_CONFIG KEY=RC_DDL_ENGINE_REWRITE_XUANWUV2;Si el resultado es
true, el motor predeterminado es XUANWU_V2 y el valor predeterminado deINDEX_ALLesN. Establezca explícitamenteINDEX_ALL = 'Y'al crear tablas de diccionario en estos clústeres; de lo contrario, la operación fallará. Si el resultado esfalsey no establece explícitamente el motor de tabla en XUANWU_V2, el motor de tabla predeterminado será XUANWU.
Ejemplo
Cree una tabla de diccionario llamada tbl_dict_name:
CREATE TABLE tbl_dict_name (
`value` VARCHAR NOT NULL COMMENT 'value of an entity or a stop word',
`type` VARCHAR NOT NULL [DEFAULT 'main' COMMENT 'main: entity (not segmented); stop: excluded from index (V3.1.4.24+)'],
PRIMARY KEY (`value`, `type`)
) COMMENT = 'your dictionary table'
FULLTEXT_DICT = 'Y',
INDEX_ALL = 'Y';
Actualizar un diccionario personalizado
Las operaciones INSERT y DELETE surten efecto de inmediato. Los datos escritos después de la actualización se segmentan utilizando las entradas más recientes del diccionario.
Ejemplos
Agregar una stop word:
INSERT INTO `tbl_dict_name` (`value`, `type`) VALUES ('and', 'stop');
Eliminar una palabra:
DELETE FROM `tbl_dict_name` WHERE `value` = 'and' AND `type` = 'stop';
Usar un diccionario personalizado
Especifique el diccionario al crear un índice de texto completo en una sentencia CREATE TABLE o ALTER TABLE.
Sintaxis
FULLTEXT INDEX idx_name(`column_name`) [ WITH ANALYZER analyzer_name ] [ WITH DICT tbl_dict_name];
Parámetros
|
Parámetro |
Descripción |
|
|
Nombre del índice de texto completo. |
|
|
Columna sobre la cual se crea el índice de texto completo. |
|
|
(Opcional) Analizador que se va a utilizar. Para consultar los analizadores compatibles, vea Analizadores para índices de texto completo. |
|
|
El diccionario personalizado que se va a aplicar. |
Ejemplo
Agregue un índice de texto completo en la columna content de tbl_fulltext_demo, utilizando el analizador AliNLP y el diccionario tbl_ext_dict:
ALTER TABLE `tbl_fulltext_demo`
ADD FULLTEXT INDEX fidx_c(`content`)
WITH ANALYZER alinlp
WITH DICT `tbl_ext_dict`;