Cómo escribir un complemento de índice de texto completo de MySQL
1. Introducción
El complemento de índice de texto completo se utiliza para ampliar la búsqueda completa. -Función de búsqueda de texto de MYISAM. A través de la búsqueda de texto completo, podemos segmentar e indexar tipos de datos enriquecidos, como documentos, imágenes o vídeos, para una recuperación rápida.
Actualmente, MySQL solo admite la recuperación de texto completo en el motor de almacenamiento MYISAM y, para innodb, no se implementará hasta la versión 6.0 o superior.
Sin embargo, el índice de texto completo tiene las siguientes limitaciones:
1. Solo compatible con MyISAM
2. p>3. Si una sola tabla admite múltiples conjuntos de caracteres, todas las columnas del índice de texto completo deben usar el mismo conjunto de caracteres y biblioteca
4. Las columnas MATCH() deben ser las mismas que ciertas columnas. en la lista FATCH() de la tabla. La lista debe coincidir exactamente con la lista de columnas en alguna definición de índice FULLTEXT para la tabla, a menos que MATCH() esté EN modo BOOLEAN
5. ) lista Algunas columnas son iguales. El argumento de CONTRA() debe ser una cadena constante.
Entonces, ¿qué papel juega el complemento de texto completo en esto? El propio tokenizador de MYISAM dividirá los datos de la columna y los almacenará en el índice de texto completo, mientras que el complemento de texto completo utiliza el tokenizador para procesar las cadenas de la consulta;
Por ejemplo, puede utilizar complementos para segmentar datos multimedia, utilizar sus propios algoritmos para la segmentación e incluso cambiar la sintaxis para la búsqueda de texto completo.
2. Cómo escribir un complemento de texto completo
La escritura de complementos incluye principalmente: los programas init, deinit y parse se llamarán una vez antes; cada ejecución de SQL, y se llamará después de que se complete la ejecución. Llame a la función deinit. La función parse() realiza un análisis de sintaxis SQL durante la ejecución
1)
1)
2.p>
1) Declarar se utiliza un complemento
struct st_mysql_ftparser para declarar un complemento de texto completo
struct st_mysql_ftparser
{
intinterface_version;
int (*parse)(MYSQL_FTPARSER_PARAM *param);
int(*init)(MYSQL_FTPARSER_PARAM *param);
int(*deinit)(MYSQL_FTPARSER_PARAM *param) ;
p>};
Campo
Tipo
Descripción
Versión de interfaz p>
int p>
Número de versión
parse
int (*parse)(MYSQL_FTPARSER_ PARAM *param
Sintaxis); analizador
init
int (*init)(MYSQL_FTPARSER_PARAM *param);
Función de inicialización, puntero de función
deinit
int (* deinit)(MYSQL_FTPARSER_PARAM *param);
Función de limpieza, puntero de función
Como puede ver, estas tres funciones tienen un tipo de parámetro común: MYSQL_FTPARSER_PARAM es un parámetro utilizado por la estructura inicializada de MySQL, pero su puntero de función se puede modificar para utilizar funciones personalizadas.
Para utilizar una función personalizada, la estructura es la siguiente:
Campo
Tipo
Descripción
mysql_parse
int ( *mysql_parse)(struct st_mysql_ftparser_param *,
char * doc, int doc_len)
La función de análisis de texto completo incorporada de mysql se utiliza de forma predeterminada.
mysql_add_word
int (*mysql_add_word)(struct st_mysql_ftparser_param *,
char * palabra, int word_len,
MYSQL_FTPARSER _BOOLEAN_INFO *)
Se utilizan para procesar cada palabra descompuesta; normalmente se añaden a un árbol o lista. y al final insertar/actualizar/eliminar registros en el índice de texto completo
ftparser_state
void *
Podemos asignar memoria adicional para que este puntero pase entre diferentes Interfaces API
mysql_ftparam
void *
MySQL usa este puntero internamente para pasar información a mysql_param. Al escribir un complemento, MySQL pasa información a mysql_parse y mysql_add_word sin modificar
cs
struct charset_info_st *
El juego de caracteres del documento
doc
char *
Documentos que deben analizarse, por ejemplo, podemos completar una URL y luego analizarla en el analizador de sintaxis. Podemos leer el archivo correspondiente a la url y analizarlo
length
int
la longitud del documento, esto se debe a que es posible que el documento no termine con \0 termina, debemos prestar atención a esto al escribir complementos
flags
int
Actualmente solo hay una opción: MYSQL_FTFLAGS_NEED_COPY, que es se usa para decirle a mysql_add_word que necesita una copia de la palabra; el mysql_parse() incorporado no necesita especificar este indicador porque usa un puntero a doc, que sigue siendo válido incluso después de salir de la función
mode
enum enum_ftparser_mode
Los tipos de operación incluyen principalmente los siguientes tipos:
MYSQL_FTPARSER_SIMPLE_MODE: el analizador solo devuelve las palabras que necesita, excluyendo las palabras de parada y de filtro.
MYSQL_FTPARSER_WITH_ STOPWORDS: se utiliza para la coincidencia de palabras de consulta booleana, en este caso debemos considerar todas las palabras, incluidas las palabras vacías
MYSQL_FTPARSER_FULL_BOOLEAN_ INFO: se utiliza para analizar cadenas de consulta booleanas que contienen operadores booleanos; en este caso, necesitamos
establecer el parámetro mysql_ add_word - MYSQL_FTPARSER_BOOLEAN_INFO
cuando el modo está configurado en MYSQL_FTPARSER_FULL_BOOLEAN_ INFO.
Necesitamos establecer el último parámetro para la función mysql_add_word. Veamos nuevamente el prototipo de la función:
int (*mysql_add_word)(structst_mysql_ftparser_param *,
char *word, int word_len.
int (*mysql_add_word)(structst_mysql_ftparser_param *,
char *word, int word_len.
p>MYSQL_FTPARSER_BOOLEAN_INFO *);
La última estructura de parámetros es MYSQL_FTPARSER_BOOLEAN_INFO, es decir, estructura st_mysql_ftparser_boolean_info, como se muestra a continuación:
Campo
Tipo
Descripción
Tipo
enum enum_ft_token_type
Se utiliza para marcar tipos de token, existen los siguientes tipos:
FT_TOKEN_EOF:
No es necesario configurar
FT_TOKEN_WORD :
Representa una palabra común
FT_TOKEN_STOPWORD :
Palabra parada, índice Ignorar
FT_TOKEN_LEFT_PAREN:
Indica el inicio de la subexpresión
FT_TOKEN_RIGHT_PAREN:
Indica el final de la subexpresión
yesno
int
Se utiliza para admitir operaciones booleanas:
>Deben coincidir 0 palabras, correspondientes a +
weight_adjust
int
Importancia de la palabra asociada,
>0, correspondiente a >operador
wasign
char
Importancia de la palabra:
Diferente de cero significa palabras ruidosas, lo que reducirá la relevancia, correspondiente al operador~
trunc
char
Si es distinto de cero, el La palabra se considera un prefijo y todas las palabras con este prefijo coincidirán, correspondientes a *
prev
char
ignorar
char*
corresponde al ""operador de comillas dobles