Faceted Search(solr) vs Good viejo filtrado a través de PHP?
magento faceted-search (4)
Layered Navigation == Búsqueda facetada.
Son lo mismo, pero Magento y otros usan una redacción diferente, probablemente para ser pegadiza. Por lo que sé, Magento admite tanto la búsqueda con facetas de Solr como la de MySQL. La principal diferencia es el rendimiento.
El rendimiento es la principal compensación.
Para realizar una búsqueda facetada en MySQL es necesario que una las tablas, mientras que Solr indexa las facetas del documento automáticamente para filtrar. En general, puede lograr tiempos de respuesta rápidos utilizando Solr (<100 ms para una consulta de búsqueda multifacética) en hardware promedio. Si bien MySQL demorará más en realizar la misma búsqueda, se puede optimizar con índices para lograr tiempos de respuesta similares.
La desventaja de Solr es que requiere configurar, asegurar y ejecutar otro servicio más en su servidor. También puede consumir bastante CPU y memoria dependiendo de su configuración (Tomcat, embarcadero, etc.).
La búsqueda facetada en PHP / MySQL es posible, y no tan difícil como se podría pensar.
Necesita un esquema de base de datos específico, pero es factible. Aquí hay un ejemplo simple:
producto
+----+------------+
| id | name |
+----+------------+
| 1 | blue paint |
| 2 | red paint |
+----+------------+
clasificación
+----+----------+
| id | name |
+----+----------+
| 1 | color |
| 2 | material |
| 3 | dept |
+----+----------+
clasificación del producto
+------------+-------------------+-------+
| product_id | classification_id | value |
+------------+-------------------+-------+
| 1 | 1 | blue |
| 1 | 2 | latex |
| 1 | 3 | paint |
| 1 | 3 | home |
| 2 | 1 | red |
| 2 | 2 | latex |
| 2 | 3 | paint |
| 2 | 3 | home |
+------------+-------------------+-------+
Entonces, digamos que alguien busque paint
, harías algo como:
SELECT p.* FROM product p WHERE name LIKE ''%paint%'';
Esto devolvería ambas entradas de la tabla de product
.
Una vez que se haya ejecutado su búsqueda, puede buscar las facetas (filtros) asociadas de su resultado usando una consulta como esta:
SELECT c.id, c.name, pc.value FROM product p
LEFT JOIN product_classification pc ON pc.product_id = p.id
LEFT JOIN classification c ON c.id = pc.classification_id
WHERE p.name LIKE ''%paint%''
GROUP BY c.id, pc.value
ORDER BY c.id;
Esto te dará algo como:
+------+----------+-------+
| id | name | value |
+------+----------+-------+
| 1 | color | blue |
| 1 | color | red |
| 2 | material | latex |
| 3 | dept | home |
| 3 | dept | paint |
+------+----------+-------+
Entonces, en su conjunto de resultados, usted sabe que hay productos cuyo color es blue
y red
, que el único material del que está hecho es el latex
, y que se puede encontrar en los departamentos de home
y paint
.
Una vez que un usuario selecciona una faceta, simplemente modifique la consulta de búsqueda original:
SELECT p.* FROM product p
LEFT JOIN product_classification pc ON pc.product_id = p.id
WHERE
p.name LIKE ''%paint%'' AND (
(pc.classification_id = 1 AND pc.value = ''blue'') OR
(pc.classification_id = 3 AND pc.value = ''home'')
)
GROUP BY p.id
HAVING COUNT(p.id) = 2;
Por lo tanto, aquí el usuario busca la paint
palabras clave e incluye dos facetas: faceta blue
para color y home
para departamento. Esto te dará:
+----+------------+
| id | name |
+----+------------+
| 1 | blue paint |
+----+------------+
Entonces, en conclusión. Aunque está disponible desde el primer momento en Solr, es posible implementarlo en SQL con bastante facilidad.
Estoy planeando configurar un sistema de filtro (refinar su búsqueda) en mis tiendas de comercio electrónico. Puede ver un ejemplo aquí: http://www.bettymills.com/shop/product/find/Air+and+HVAC+Filters
Las plataformas como PrestaShop, OpenCart y Magento tienen lo que se llama navegación en capas.
Mi pregunta es cuál es la diferencia entre la navegación en capas en plataformas como Magento o PrestaShop en comparación con el uso de algo como Solr o Lucene para la navegación con facetas.
¿Se puede lograr un resultado similar con solo php y mysql?
Una explicación detallada es muy apreciada.
Magento Enterprise Edition tiene una implementación de Solr con búsqueda facetada. Aún necesita configurar Solr para indexar los datos correctos; es decir, Solr se ejecuta en Java en un host con un puerto específico. Magento se conecta a él a través de una URL determinada. Cuando Magento configura la búsqueda con facetas, realiza una solicitud a Solr y procesa el xml recibido en un formulario en la interfaz. La diferencia sería una de velocidad. Solicitar a Solr es muy rápido. Si tiene más de 100,000 productos en su tienda y desea respuestas rápidas en las solicitudes de búsqueda, puede usar Solr. Pero aún así, si tiene un servidor separado para la base de datos de Magento con mucha memoria, también puede usar la búsqueda facetada basada en Mysql de Magento. Si no tiene dinero para gastar en Magento EE, puede usar esta implementación de solr . Pero no tengo ninguna experiencia con este.
Puede crear búsquedas facetadas con solo PHP y MySQL, Drupal Faceted Search es un buen ejemplo. Pero si ya usas Solr, obtienes la búsqueda facetada incluida de forma gratuita.
fuera de la caja de solr, puede usar faceta calculada, rango, elegir una faceta o excluir una, declarar si una faceta tiene un valor mono o multivaluada con un costo de CPU / ram muy bajo
Por otro lado, lleva un tiempo parametrizar y asegurar la instalación de Solr, también lleva algo de tiempo rastrear sus datos.