Intereting Posts
Как получить все таксономии, связанные с сообщением – WordPress Чтение данных сеанса PHP в node.js пригласительный календарь .ics не работает в выпуске outlook.com Таблица PHP / MySQL с гиперссылками Как установить поле объекта, которое не существует в таблице, но существует в необработанном SQL как псевдоним? Предупреждение: mysqli_num_rows () ожидает, что параметр 1 будет mysqli_result, null указан в Поведение PHP ltrim с символьным списком Неправильная ориентация Jcrop от загрузки Iphone, как я могу это сделать? Как защитить phpMyAdmin Как установить один FK (внешний ключ) на несколько таблиц? Ошибка Google map api v3 как поддерживать UTF8 (японский, арабский, испанский, …) URL в PHP Субдомены, ведущие к контроллерам Codeigniter? Несколько файлов Загрузка результатов в foreach () ошибка mongo Ошибка PHP-приложения: Неустранимая ошибка: исключить исключение «MongoException» с сообщением «». не разрешено в ключе

Граничный поиск (solr) vs Хорошая старая фильтрация через PHP?

Я планирую настроить систему фильтров (уточнить ваш поиск) в моих магазинах электронной торговли. Здесь вы можете увидеть пример: http://www.bettymills.com/shop/product/find/Air+and+HVAC+Filters

Платформы, такие как PrestaShop, OpenCart и Magento, имеют так называемую многоуровневую навигацию.

Мой вопрос в том, какова разница между многоуровневой навигацией на таких платформах, как Magento или PrestaShop, по сравнению с использованием чего-то вроде Solr или Lucene для фасетной навигации.

Может ли аналогичный результат быть выполнен через только php и mysql?

Подробное объяснение очень ценится.

Solutions Collecting From Web of "Граничный поиск (solr) vs Хорошая старая фильтрация через PHP?"

Слоистая навигация == Граничный поиск.

Это одно и то же, но Magento и al используют разные формулировки, вероятно, быть броскими. Насколько я знаю, Magento поддерживает как Solr-фасетный поиск, так и MySQL. Основное отличие – производительность.

Производительность является основным компромиссом.

Для выполнения фасетного поиска в MySQL требуется присоединиться к таблицам, в то время как Solr автоматически индексирует графы документа для фильтрации. Обычно вы можете получить быстрое время отклика, используя Solr (<100 мс для многоаспектного поискового запроса) на среднем оборудовании. Хотя MySQL займет больше времени для одного и того же поиска, его можно оптимизировать с помощью индексов для достижения аналогичного времени отклика.

Недостатком Solr является то, что он требует, чтобы вы настраивали, защищали и запускали еще одну услугу на своем сервере. Это может быть довольно интенсивным CPU и интенсивной памятью в зависимости от вашей конфигурации (Tomcat, причал и т. Д.).

Граничный поиск в PHP / MySQL возможен, и не так сложно, как вы думаете.

Вам нужна конкретная схема базы данных, но это возможно. Вот простой пример:

продукт

+----+------------+ | id | name | +----+------------+ | 1 | blue paint | | 2 | red paint | +----+------------+ 

классификация

 +----+----------+ | id | name | +----+----------+ | 1 | color | | 2 | material | | 3 | dept | +----+----------+ 

product_classification

 +------------+-------------------+-------+ | 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 | +------------+-------------------+-------+ 

Итак, скажите, что кто-то ищет paint , вы бы сделали что-то вроде:

 SELECT p.* FROM product p WHERE name LIKE '%paint%'; 

Это приведет к возврату обеих записей из таблицы product .

Как только ваш поиск будет выполнен, вы можете получить связанные грани (фильтры) вашего результата с помощью запроса, подобного этому:

 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; 

Это даст вам что-то вроде:

 +------+----------+-------+ | id | name | value | +------+----------+-------+ | 1 | color | blue | | 1 | color | red | | 2 | material | latex | | 3 | dept | home | | 3 | dept | paint | +------+----------+-------+ 

Итак, в вашем результирующем наборе вы знаете, что есть продукты, цвет которых blue и red , что единственный материал, из которого он сделан, – latex , и что его можно найти в отделах home и paint .

Как только пользователь выбирает фасет, просто измените исходный поисковый запрос:

 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; 

Итак, здесь пользователь ищет ключевую paint и включает в себя две грани: грань blue цвета, а также home для отдела. Это даст вам:

 +----+------------+ | id | name | +----+------------+ | 1 | blue paint | +----+------------+ 

Итак, в заключение. Хотя он доступен из коробки в Solr, его можно легко реализовать в SQL.

Magento Enterprise Edition имеет реализацию Solr с фасетным поиском. Тем не менее вам нужно настроить Solr для индексации правильных данных; т.е. Solr работает на Java на узле с определенным портом. Magento подключается к нему через заданный URL-адрес. Когда Magento устанавливает фасетный поиск, он запрашивает Solr и обрабатывает полученный xml в форме на интерфейсе. Разница была бы одной из скоростей. Запросить Solr очень быстро. Если у вас есть около 100 000 продуктов в вашем магазине и вы хотите быстро ответить на запросы поиска, вы можете использовать Solr. Но все же, если у вас есть отдельный сервер для базы данных Magento с большой памятью, вы также можете просто использовать Magento, встроенный в грантовый поиск на основе Mysql. Если у вас нет денег на Magento EE, вы можете использовать эту реализацию solr . Но у меня нет опыта с этим.

из поля solr вы можете использовать рассчитанную грань, диапазон, выбрать грань или исключить ее, объявить, является ли фасет монооценкой или многозначным с очень низкой стоимостью процессора / бара

С другой стороны, требуется некоторое время для параметра и защиты установки solr, также требуется некоторое время для сканирования ваших данных.

Вы можете создать фасетный поиск только с PHP и MySQL, хорошим примером является Drupal Faceted Search . Но если вы уже используете Solr, вы получите бесплатный доступ к фасетному поиску.