Búsqueda de texto completo de MySQL

Hoy he jugado para optimizar un lento SQL tipo de solicitud

SELECT * FROM 'table' WHERE `field` LIKE '%word%'

Dónde está la problemática un momento aquí – el último parte palabra % ‘ %’ y en caracteres de concreción mayor % antes de la palabra, para eso hacemos. Símbolo de comodín % ,antes de cualquier valor, nuestra aplicación directamente se traduce directamente en un lento, porque de esta manera la aplicación deja de nosotros para utilizar los índices de la. Como siempre hay soluciones, pero no siempre son 😆 claro generalmente MySQL tienes una solución a este problema con búsqueda de texto completo Indexación de la. Cómo es el cambio del campo allí mucho está escrito en la documentación, pero de prisa se describe cómo cambiar la solicitud superior, ya por fin llegaremos a un pequeño drama. Conforman un lindo como aplicable al campo de texto, la consulta debe ser cambiado en forma:

SELECT * FROM `table` WHERE MATCH (field) AGAINST ('word')

Así que la estructura es evidente y no hay necesidad de discusión innecesaria. La consulta anterior entrará en vigor, Si la palabra, para que usted está haciendo una petición menos 4 el símbolo de, Este es el valor por defecto, Si desea modificarlo, debe especificar el valor, Quiero mi. cnf en la parte [mysqld] con la declaración ft_min_word_len= 3 o 2, 1 no es una buena opción obviamente 😉 . Después de cambiar el valor y reinicie el mysql server-necesidad de hacer una reparación de tablas, en orden para la indexación de direcciones nueva entra en vigor. Aquí todo claro: se cambia, Vuelvo a activar, índices de rebildvam y hacer mi pedido y devuelve 0 Control de línea con 😀

SHOW VARIABLES

Veo que los valores, He preguntado han entrado en vigor, índices de rebildvam otra vez – mismo resultado. 🙄 Odio, muy incómodo. ОТ ТУК НАТАТЪК ЗАПОЧНА ЕДНО ГОЛЯМО РУГАЕНЕ И РОВЕНЕ ЗА КЛЮЧА ЗА БАРАКАТА 😀 КОЙТО СЕ ОКАЗА ДОСТА, ДОСТА ИНТЕРЕСЕН. КАТО ЦЯЛО, КАТО ЗАПОЧНАХ ДА ЧЕТА ДОКУМЕНТАЦИЯТА ЗА НЕ ЗНАМ КОЙ ПЪТ И СТИГНАХ ДО ЕДИН ИНТЕРЕСЕН ПАСАЖ

Esta técnica funciona mejor con grandes colecciones (En realidad, cuidadosamente se templó esta manera). Para tablas muy pequeñas, distribución de la palabra no refleja adecuadamente su valor semántico, y este modelo a veces puede producir resultados extraños. Por ejemplo, Aunque la palabra "MySQL" está presente en cada fila de la tabla artículos anteriores, una búsqueda de la palabra no produce resultados

VIGA 😳 dar mi pequeña bandeja – Todavía era una prueba. En una tabla de comentarios de aplicación grande con sobre 2 000 000 orden y cosas allí están dormidas. Bien ya ha claro el problema. Para aclarar la solución, Voy a mencionar brevemente, ese apoyo de búsqueda de texto completo 3 Modos avanzados BOOLEAN , EXPRESIONES y LENGUAJE NATURAL como los últimos trabajos por defecto. Sobre los diferentes modos puede consultar la documentación, Voy a explicar con 2-3 palabras a BOOLEANO, porque es la clave. Soporta operadores lógicos del tipo y, O , NO y así sucesivamente y puede hacer alguna magia con las frases de búsqueda, para tener una, existe otro, etcetera.. Soportes y símbolo *, es el equivalente de caracteres comodín % 😉 es útil, Cuando el término de búsqueda está en la longitud de la ft_min_word_len o bandejas pequeñas ;). Por lo menos a mí en la mesa con sobre 100 la línea está haciendo un trabajo perfecto. Lo unico que queda y la aplicación acabada:

SELECT * FROM `table` WHERE MATCH (field)
AGAINST ('*word*' IN BOOLEAN MODE)

Ahora aquí viene un tiempo de indexación trabaja con nosotros caracteres comodín – la respuesta es que no sé. Creo que en principio, en cuanto a, porque no se especifica en la documentación, pero en la documentación al parecer no decir ni mostrar un montón de cosas 😀

Mejorado por Zemanta

2 comentarios

Deja una respuesta

Su dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Anti Spam *