MySQL puede realizar búsquedas full-text booleanas usando el
modificador IN BOOLEAN MODE
:
mysql> SELECT * FROM articles WHERE MATCH (title,body) -> AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE); +----+-----------------------+-------------------------------------+ | id | title | body | +----+-----------------------+-------------------------------------+ | 1 | MySQL Tutorial | DBMS stands for DataBase ... | | 2 | How To Use MySQL Well | After you went through a ... | | 3 | Optimizing MySQL | In this tutorial we will show ... | | 4 | 1001 MySQL Tricks | 1. Never run mysqld as root. 2. ... | | 6 | MySQL Security | When configured properly, MySQL ... | +----+-----------------------+-------------------------------------+
Esta consulta recibe todos los registros que contienen la palabra “MySQL” pero que no contiene la palabra “YourSQL”.
Búsquedas full-text booleanas tienen estas características:
No usa el límite del 50%.
No ordenan registros automáticamente para ordenarlos por relevancia decrecente. Puede verlo en la consulta precedente: El registro con la relevancia mayor es la que contiene “MySQL” dos veces, pero se lista la última, no la primera.
Pueden funcionar incluso sin un índice
FULLTEXT
, aunque una búsqueda ejecutada
de esta forma sería bastante lenta.
La longitud mínima y máxima de palabra de parámetro de full-text se aplica.
Se aplica la lista de palabras de parada.
La capacidad de búsqued full-text booleana soporta los siguientes operadores:
+
Un signo más indica que esta palabra debe estar presente en cada registro que se retorne.
-
Un signo menos indica que esta palabra debe no estar presente en cualquiera de los registros que se retornan.
(sin operador)
Por defecto (cuando ni +
ni
-
se especifica) la palabra es opcional,
pero los registros que la contienen se clasifican mejor.
Esto mimetiza el comportamiento de MATCH() ...
AGAINST()
sin el modificador IN BOOLEAN
MODE
.
> <
Estos dos operadores se usan para cambiar la contribución
de la palabra al valor de relevancia que se asigna a un
registro. El operador >
incrementa la
contribución y el operador <
lo
decrementa. Consulte el ejemplo a continuación.
( )
Los paréntesis se usan para agrupara palabras en subexpresiones. Los grupos entre paréntesis se pueden anidar.
~
Una tilde actúa como operador de negación, causando que la
contribución de la palabra a la relevancia del registro sea
negativa. Esto es útil para marcar palabras
“ruidosas”. Un registro que contenga tales
palabras se clasifica peor que otros, pero no se excluye,
como se haría con el operador -
.
*
El asterisco sirve como operador de truncado. A diferencia de otros operadores, debe ser añadido a la palabra afectada.
"
Una frase entre comillas dobles
('"
') coincide sólo con registos
que contienen la frase literalmente, como si se
hubiera escrito. El motor de full-text divide la
frase en palabras, realiza una búsqueda en el índice
FULLTEXT
de la palabra. Antes de MySQL
5.0.3, el motor realizaba una búsqueda de subcadenas para
la frase en el registro en que se encontraban, de forma que
la coincidencia debe incluir caracteres no imprimibles en la
frase. Desde MySQL 5.0.3, los caracteres no imprimibles no
necesitan coincidir exactamente: La búsqueda de frases
requiere sólo que las coincidencias contengan exactamente
las mismas palabras de la frase y en el mismo orden. Por
ejemplo, "test phrase"
coincide con
"test, phrase"
en MySQL 5.0.3, pero no
anteriormente.
Si la frase no contiene palabras que están en el índice, el resultado es vacío. Por ejemplo, si todas las palabras son palabras de parada o con longitud menor que la mínima para palabras indexadas, el resultado es vacío.
Los siguientes ejemplos demuestran algunas cadenas de búsqueda que usan operadores booleanos full-text:
'apple banana'
Encuentra registros que contengan al menos una de las dos palabras.
'+apple +juice'
Encuentra registros que contengan ambas palabras.
'+apple macintosh'
Encuentra registros que contengan la palabra “apple”, pero claficia mejor las que tambíen contengan “macintosh”.
'+apple -macintosh'
Encuentra registros que contengan la palabra “apple” pero no “macintosh”.
'+apple +(>turnover <strudel)'
Encuentra registros que contengan las palabras “apple” y “turnover”, o “apple” y “strudel” (en cualquier orden), pero clasifican “apple turnover” mejor que “apple strudel”.
'apple*'
Encuentra registros que contenga palabras tales como “apple”, “apples”, “applesauce”, o “applet”.
'"some words"'
Encuentra registros que contienen la frase exacta
“some words” (por ejemplo, registros que
contengan “some words of wisdom” pero no
“some noise words”). Tenga en cuenta que el
carácter '"
' que envuelve la frase son
caracteres operadores que delimitan la frase. No son los
delimitadores que rodean la cadena de búsqueda en sí.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.