Red de conocimiento informático - Conocimiento informático - Cómo escribir un complemento de índice de texto completo de MySQL

Cómo escribir un complemento de índice de texto completo de MySQL

1. Introducción El complemento de indexación de texto completo se utiliza para ampliar la funcionalidad de búsqueda de texto completo de MYISAM. A través de la búsqueda de texto completo, podemos segmentar tipos de datos enriquecidos, como documentos, imágenes o vídeos.

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

int

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

quot

char*

corresponde al ""operador de comillas dobles