Utilizar el modo booleano para búsquedas avanzadas
En este paso, exploraremos el modo booleano de la cláusula MATCH AGAINST
, que permite realizar búsquedas de texto completo más precisas y flexibles. El modo booleano proporciona operadores para especificar palabras obligatorias, prohibidas y opcionales en la consulta de búsqueda.
Primero, asegúrate de estar conectado al servidor MySQL y utilizando la base de datos search_db
. Si cerraste la conexión, vuelve a conectarte utilizando:
mysql -u root -p
Ingresa la contraseña de root cuando se te solicite. Luego, selecciona la base de datos:
USE search_db;
Para utilizar el modo booleano, se agrega la cláusula IN BOOLEAN MODE
a la declaración MATCH AGAINST
. La sintaxis es:
SELECT * FROM table_name WHERE MATCH (column1, column2, ...) AGAINST ('search_term' IN BOOLEAN MODE);
A continuación, se presentan algunos de los operadores disponibles en el modo booleano:
+
: La palabra debe estar presente en cada fila que se devuelva.
-
: La palabra no debe estar presente en ninguna fila que se devuelva.
>
: La palabra contribuye a la relevancia de la fila.
<
: La palabra reduce la relevancia de la fila.
~
: La palabra contribuye negativamente a la relevancia de la fila.
*
: El operador comodín.
""
: Define una frase.
Comencemos con un ejemplo sencillo. Supongamos que queremos encontrar artículos que deben contener la palabra "MySQL" y no deben contener la palabra "optimizing". Podemos utilizar la siguiente consulta:
SELECT * FROM articles WHERE MATCH (title, content) AGAINST ('+MySQL -optimizing' IN BOOLEAN MODE);
Esta consulta devolverá las filas que contengan "MySQL" pero no contengan "optimizing".
Deberías ver la siguiente salida:
+----+------------------------+---------------------------------------------------------------------+
| id | title | content |
+----+------------------------+---------------------------------------------------------------------+
| 1 | MySQL Full-Text Search | This article explains how to use full-text search in MySQL. |
| 2 | Indexing in MySQL | Learn about different types of indexes in MySQL, including full-text indexes. |
+----+------------------------+---------------------------------------------------------------------+
2 rows in set (0.00 sec)
Observa que el artículo con el título "Optimizing MySQL Queries" no se devuelve porque contiene la palabra "optimizing".
Ahora, probemos una consulta que requiera "MySQL" y prefiera "indexing":
SELECT * FROM articles WHERE MATCH (title, content) AGAINST ('+MySQL indexing' IN BOOLEAN MODE);
En el modo booleano, sin ningún operador, las palabras se tratan como opcionales. Esta consulta requiere "MySQL" e incluye opcionalmente "indexing".
La salida será:
+----+--------------------------+---------------------------------------------------------------------+
| id | title | content |
+----+--------------------------+---------------------------------------------------------------------+
| 1 | MySQL Full-Text Search | This article explains how to use full-text search in MySQL. |
| 2 | Indexing in MySQL | Learn about different types of indexes in MySQL, including full-text indexes. |
| 3 | Optimizing MySQL Queries | Tips and tricks for optimizing your MySQL queries for better performance. |
+----+--------------------------+---------------------------------------------------------------------+
3 rows in set (0.00 sec)
Se devuelven los tres artículos porque todos contienen "MySQL". La presencia de "indexing" es opcional.
Utilicemos el operador >
para aumentar la relevancia de las filas que contengan "indexing":
SELECT * FROM articles WHERE MATCH (title, content) AGAINST ('+MySQL >indexing' IN BOOLEAN MODE);
Esta consulta sigue requiriendo "MySQL", pero ahora las filas que contengan "indexing" se clasificarán más alto (aunque en este ejemplo no estamos ordenando por relevancia). La salida sigue siendo la misma, pero las puntuaciones de relevancia internas se ven afectadas.
Finalmente, busquemos una frase utilizando comillas dobles:
SELECT * FROM articles WHERE MATCH (title, content) AGAINST ('"full-text search"' IN BOOLEAN MODE);
Esta consulta buscará la frase exacta "full-text search".
La salida será:
+----+------------------------+---------------------------------------------------------------------+
| id | title | content |
+----+------------------------+---------------------------------------------------------------------+
| 1 | MySQL Full-Text Search | This article explains how to use full-text search in MySQL. |
| 2 | Indexing in MySQL | Learn about different types of indexes in MySQL, including full-text indexes. |
+----+------------------------+---------------------------------------------------------------------+
2 rows in set (0.00 sec)
En este paso, aprendiste cómo utilizar el modo booleano con la cláusula MATCH AGAINST
para realizar búsquedas de texto completo más avanzadas y precisas utilizando operadores como +
, -
, >
, <
y ""
. En el siguiente paso, probarás y perfeccionarás tus consultas de texto completo.