the index fulltext full examples column mysql sql full-text-search

index - Buscar "coincidencia de palabra completa" en MySQL



mysql match (6)

Esta es la mejor respuesta con la que me he encontrado hasta ahora:

SELECT * FROM table WHERE keywords REGEXP ''^rid[ $]'' OR keywords REGEXP '' rid[ $]''

Lo habría simplificado para:

SELECT * FROM table WHERE keywords REGEXP ''[^ ]rid[ $]''

pero [^] tiene un significado especial de "NO un espacio", en lugar de "comienzo de línea o espacio".

¿Cómo se compara REGEXP con múltiples condiciones LIKE? (No es que el rendimiento sea importante en esta aplicación).

Me gustaría escribir una consulta SQL que busque una palabra clave en un campo de texto, pero solo si es una "coincidencia de palabra completa" (por ejemplo, cuando busco "deshacer", no debe coincidir con "árido", pero debería hacer coincidir "a lib".

Estoy usando MySQL.

Afortunadamente, el rendimiento no es crítico en esta aplicación, y el tamaño de la base de datos y el tamaño de cadena son ambos cómodamente pequeños, pero preferiría hacerlo en el SQL que en el PHP que lo maneja.


Se encontró una respuesta para evitar que el límite de palabras clásico [[::<::]] entrara en conflicto con los caracteres especiales, por ejemplo, @ # $% ^ & *

Reemplazar..

SELECT * FROM table WHERE keywords REGEXP ''[[:<:]]rid[[:>:]]''

Con este..

SELECT * FROM table WHERE keywords REGEXP ''([[:blank:][:punct:]]|^)rid([[:blank:][:punct:]]|$)''

Las últimas coincidencias (espacio, pestaña, etc.) || (coma, corchete, etc.) || inicio / fin de línea Una coincidencia de límite de palabra más ''finalizada''.


Usa regexp con límites de palabras, pero si también quieres una búsqueda insensible a los acentos, ten en cuenta que REGEXP es un operador de un solo byte, por lo que no vale la pena tener la intercalación utf8_general_ci, la coincidencia no será insensible a los acentos.

Para que coincidan tanto el acento como la palabra completa, especifique la palabra escrita de la misma manera que lo hizo la función PHP (obsoleta) sql_regcase ().

De hecho:

  • utf8_general_ci le permite realizar una búsqueda de igualdad (DONDE campo = valor) e insensible a los acentos, pero no le permite especificar una coincidencia completa de palabras (no se reconocen los límites de las palabras)

  • LIKE le permite realizar búsquedas insensibles a mayúsculas y minúsculas, pero debe especificar manualmente todas las combinaciones de posibles caracteres de límites de palabras (no se reconocen los límites de palabras)

  • los límites de palabras [[: <:]] y [[:>:]] son ​​compatibles con REGEXP, que es una función de un solo byte, por lo que no debe realizar búsquedas que no acentúen.

La solución es usar REGEXP con límites de palabras y la palabra modificada en la forma en que lo hace sql_regcase.

Utilizado en http://www.genovaperte.it


Puede usar los marcadores de límite de palabras REGEXP y [[:<:]] y [[:>:]] :

SELECT * FROM table WHERE keywords REGEXP ''[[:<:]]rid[[:>:]]''


select * from table where Locate(''rid '', FieldToSearch) > 0 or Locate('' rid'', FieldToSearch) > 0

Esto manejará deshacerse de donde está precedido o seguido por un espacio, se puede extender el enfoque para tener en cuenta.,?! y así sucesivamente, no elegante pero fácil.


select blah blah blah where column like ''rid %'' or column like ''% rid'' or column like ''% rid %'' or column = ''rid''