sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo implementaría una búsqueda de sitio simple con php y mySQL?

Todos sugieren la búsqueda de texto completo de MySQL, sin embargo, debe tener en cuenta una GRAN advertencia. El motor de búsqueda de texto completo solo está disponible para el motor MyISAM (no para InnoDB, que es el motor más utilizado debido a su integridad referencial y conformidad con ACID).

Así que tienes algunas opciones:

1. El enfoque más simple se describe en Particle Tree . De hecho, puede obtener búsquedas clasificadas de SQL puro (sin texto completo, sin nada). La siguiente consulta SQL buscará en una tabla y clasificará los resultados según el número de ocurrencias de una cadena en los campos de búsqueda:

SELECT
    SUM(((LENGTH(p.body) - LENGTH(REPLACE(p.body, 'term', '')))/4) +
        ((LENGTH(p.body) - LENGTH(REPLACE(p.body, 'search', '')))/6))
    AS Occurrences
FROM
    posts AS p
GROUP BY
    p.id
ORDER BY
    Occurrences DESC

editó su ejemplo para proporcionar un poco más de claridad

Las variaciones en la consulta SQL anterior, agregando instrucciones WHERE (WHERE p.body LIKE '%whatever%you%want'), etc., probablemente obtendrán exactamente lo que necesita.

2. Puede modificar el esquema de su base de datos para admitir texto completo. A menudo, lo que se hace para mantener la integridad referencial de InnoDB, el cumplimiento de ACID y la velocidad sin tener que instalar complementos como Sphinx Fulltext Search Engine para MySQL es dividir los datos de cotización en su propia tabla. Básicamente, tendría una tabla Quotes que es una tabla InnoDB que, en lugar de tener su campo de TEXTO "datos", tiene una referencia "quote_data_id" que apunta a la ID en una tabla Quote_Data que es una tabla MyISAM. Puede hacer su texto completo en la tabla MyISAM, unir las ID devueltas con sus tablas InnoDB y listo, tiene sus resultados.

3. Instale Sphinx . Buena suerte con este.

Teniendo en cuenta lo que describiste, ALTAMENTE Le recomiendo que tome el primer enfoque que presenté ya que tiene un sitio simple basado en una base de datos. La primera solución es simple, hace el trabajo rápidamente. Será difícil configurar Lucene, especialmente si desea integrarlo con la base de datos, ya que Lucene está diseñado principalmente para indexar archivos, no bases de datos. La búsqueda de sitios personalizados de Google solo hace que su sitio pierda toneladas de reputación (lo hace parecer un aficionado y pirateado), y el texto completo de MySQL probablemente hará que altere el esquema de su base de datos.