Acabo de leer una publicación que menciona "búsqueda de texto completo" en SQL.
Me preguntaba cuál es la diferencia entre FTS y LIKE. Leí un par de artículos, pero no pude encontrar nada que lo explicara bien.
fuente
Acabo de leer una publicación que menciona "búsqueda de texto completo" en SQL.
Me preguntaba cuál es la diferencia entre FTS y LIKE. Leí un par de artículos, pero no pude encontrar nada que lo explicara bien.
En general, existe una compensación entre "precisión" y "recuperación". La alta precisión significa que se presentan menos resultados irrelevantes (sin falsos positivos), mientras que la alta memoria significa que faltan menos resultados relevantes (sin falsos negativos). El uso del operador LIKE le brinda una precisión del 100% sin concesiones para la recuperación. Una función de búsqueda de texto completo le brinda mucha flexibilidad para ajustar la precisión para una mejor recuperación.
La mayoría de las implementaciones de búsqueda de texto completo utilizan un "índice invertido". Este es un índice donde las claves son términos individuales y los valores asociados son conjuntos de registros que contienen el término. La búsqueda de texto completo está optimizada para calcular la intersección, unión, etc. de estos conjuntos de registros y, por lo general, proporciona un algoritmo de clasificación para cuantificar la fuerza con la que un registro determinado coincide con las palabras clave de búsqueda.
El operador SQL LIKE puede ser extremadamente ineficiente. Si lo aplica a una columna no indexada, se utilizará un análisis completo para encontrar coincidencias (como cualquier consulta en un campo no indexado). Si la columna está indexada, la comparación se puede realizar con las claves de índice, pero con mucha menos eficiencia que la mayoría de las búsquedas de índice. En el peor de los casos, el patrón LIKE tendrá comodines principales que requieren que cada clave de índice sea examinada. Por el contrario, muchos sistemas de recuperación de información pueden habilitar la compatibilidad con los comodines principales mediante la compilación previa de árboles de sufijos en campos seleccionados.
Otras características típicas de la búsqueda de texto completo son
FTS implica indexar las palabras individuales dentro de un campo de texto para que la búsqueda a través de muchos registros sea rápida. Usar LIKE aún requiere que haga una búsqueda de cadena (lineal o similar) dentro del campo.
fuente
MySQL crea un índice a partir de las palabras de la columna de búsqueda de texto completo habilitada y realiza búsquedas en este índice. MySQL usa un algoritmo sofisticado para determinar las filas que coinciden con la consulta de búsqueda.
Además, de esta respuesta SO :
fuente
Like solo usa comodines, y no es tan poderoso.
El texto completo permite búsquedas mucho más complejas, incluyendo And, Or, Not, resultados de sonido similares (SOUNDEX) y muchos más elementos.
Comenzaría a mirar SQL CONTAINS () FREETEXT () y elementos de búsqueda de texto completo relacionados para ayudar a comprender mejor lo que está disponible.
fuente
La verdadera diferencia son las metodologías de escaneo. Para la búsqueda de texto completo, las palabras (términos) se usan como claves hash, cada una de las cuales está asociada con una serie de documentos en los que aparecen las claves (términos). Es así:
Ahora, la matriz de documento de término (qué miembro de término de qué documento) se puede representar como:
Cuando llega la solicitud de "Obtenerme todos los documentos que contengan la palabra / término t1",
{d1, d5, d9,.. dn
se devuelve el conjunto de documentos }.Puede hackear un esquema de tabla desnormalizado para almacenar documentos: cada fila en la tabla MySQL se considerará como "documento" y una columna TEXT podría contener un párrafo, etc. El índice invertido contendrá los términos como claves hash y los identificadores de fila como identificadores del documento.
Recuerde que esta consulta SQL tendrá más o menos rendimiento O (1). La consulta será independiente de
Por ejemplo, este SQL podría activarse para extraer todas las filas que coincidan con la palabra dada XYZ:
Advertencia: si agrega ORDER BY a esta consulta, sus tiempos de ejecución variarán en función de varios parámetros, uno de los cuales es el número de filas / documentos coincidentes. Así que ten cuidado.
Sin embargo, LIKE no tiene nada de esto. Se ve obligado a escanear linealmente la oración / cadena y encontrar todos los términos coincidentes. Agregar comodines se suma al desorden. Funciona muy bien para cadenas de longitud pequeña, como puede imaginar, pero fallará miserablemente para oraciones más largas. Y definitivamente no es comparable cuando se tiene un párrafo o una página completa de texto, etc.
fuente
FTS es más eficiente, potente (especialmente para Word Breakers y funcionalidades derivadas) ... pero verifique sus requisitos porque a veces los DB no admiten todos los idiomas, por ejemplo, MSSQL no admite griego (consulte en esta página http: // msdn. microsoft.com/en-us/library/ms176076(v=sql.110).aspx )
fuente