Puede solucionar el problema de la función REPLACE()
sensible a mayúsculas y minúsculas de MySQL mediante el uso de LOWER()
.
Es descuidado, pero en mi extremo esta consulta funciona bastante rápido.
Para acelerar las cosas, recupero el conjunto de resultados en una selección que he declarado como una tabla derivada en mi consulta 'externa'. Como mysql ya tiene los resultados en este punto, el método de reemplazo funciona bastante rápido.
Creé una consulta similar a la siguiente para buscar varios términos en varias tablas y columnas múltiples.Puedo obtener una 'relevancia' número equivalente a la suma de la cuenta de todas las ocurrencias de todos los términos que se encuentran en todas las columnas buscó
SELECT DISTINCT (
((length(x.ent_title) - length(replace(LOWER(x.ent_title),LOWER('there'),'')))/length('there'))
+ ((length(x.ent_content) - length(replace(LOWER(x.ent_content),LOWER('there'),'')))/length('there'))
+ ((length(x.ent_title) - length(replace(LOWER(x.ent_title),LOWER('another'),'')))/length('another'))
+ ((length(x.ent_content) - length(replace(LOWER(x.ent_content),LOWER('another'),'')))/length('another'))
) as relevance,
x.ent_type,
x.ent_id,
x.this_id as anchor,
page.page_name
FROM (
(SELECT
'Foo' as ent_type,
sp.sp_id as ent_id,
sp.page_id as this_id,
sp.title as ent_title,
sp.content as ent_content,
sp.page_id as page_id
FROM sp
WHERE (sp.title LIKE '%there%' OR sp.content LIKE '%there%' OR sp.title LIKE '%another%' OR sp.content LIKE '%another%') AND (sp_content.title NOT LIKE '%goes%' AND sp_content.content NOT LIKE '%goes%')
) UNION (
[search a different table here.....]
)
) as x
JOIN page ON page.page_id = x.page_id
WHERE page.rstatus = 'ACTIVE'
ORDER BY relevance DESC, ent_title;
Espero que esto ayude a alguien
- Seacrest cabo
Esto comprueba el número de filas contienen la cadena de búsqueda. El interlocutor quiere contar con qué frecuencia la cadena de búsqueda está contenida en cada fila. – flu