Cart-Power Модуль: Умный поиск

Умный поиск для CS-Cart и Multi-Vendor

Покупатель, который дошёл до поиска, готов купить. Если поиск ничего не нашёл — он уходит, чаще всего к конкуренту.

Штатный поиск CS-Cart сравнивает запрос с началом строки в базе. Он не прощает опечаток, не знает синонимов, не понимает, что «самсунг» — это Samsung, и заметно замедляется, когда товаров становится много.

Мы выпустили модуль, который отдаёт поиск Elasticsearch и добавляет к нему всё, чего штатному не хватает.

Не только поиск: каталог, блоки и фильтры

В CS-Cart любой список товаров собирает одна функция ядра, и на большом каталоге она превращается в тяжёлый запрос к базе. Модуль перехватывает её целиком, поэтому из индекса работают не только результаты поиска, но и списки товаров в категориях, товарные блоки и блоки фильтров. Что именно отдать Elasticsearch, отмечается галочками в настройках.

Замеры на действующем маркетплейсе: каталог 779 000 товаров, 848 000 карточек в индексе. Одна и та же страница открывалась в двух режимах — обычном и с ключом skip_elastic=Y, который отключает Elasticsearch на один запрос. Адреса уникальные, кэш исключён в обоих случаях; 18 парных замеров, в таблице медианы.

Что открывает покупатель На MySQL На Elasticsearch Выигрыш
Страница категории 8,3 с 1,5 с в 5,7 раза
Та же категория, 200-я страница 8,0 с 1,4 с в 5,6 раза
Фильтр по характеристике 7,9 с 1,5 с в 5,4 раза
Главная с товарными блоками 7,3 с 0,9 с в 8,5 раза
Поиск по слову 18,1 с 1,1 с в 17 раз

Глубина каталога перестаёт стоить времени: третья, шестидесятая и двухсотая страницы категории на Elasticsearch открываются одинаково — 1,47, 1,54 и 1,42 секунды, тогда как на MySQL каждая стоит около восьми секунд.

Запись при этом остаётся за MySQL: импорт, обмен с 1С и пересчёт цен пишут в базу, а покупатель читает из индекса — ночная загрузка прайса больше не тормозит витрину.

Что теперь находится

Покупатель набирает Штатный поиск Умный поиск
cfvceyu — «samsung» в русской раскладке ничего товары Samsung
тошиба, иксбокс ничего Toshiba, X-Box 360
телевизр с опечаткой ничего телевизоры
телек ничего телевизоры, по словарю синонимов
кроссовки 43 размер размер лежит в характеристике и не ищется кроссовки нужного размера
слово в середине названия не находит находит


Неверная раскладка: cfvceyu — это «samsung», набранное по-русски. Найден 21 товар.


Кириллица вместо латиницы: «тошиба» находит Toshiba, автодополнение подсказывает точное название.

Что получает владелец магазина

Аналитику запросов. Что искали, сколько раз и что нашли. Отдельно — запросы с пустой выдачей: это прямой список того, чего не хватает в каталоге или что названо не так, как ищут покупатели.


Запросы с нулём в колонке «Найдено» — готовый список задач по каталогу.

Управление релевантностью. Вес и допуск опечаток настраиваются по каждому полю отдельно: название, артикул, краткое и полное описание, мета-теги, характеристики.


Название обычно 100, описание 10–20, артикул — точное совпадение без допуска опечаток.

Словари под свою нишу. Синонимы, стоп-слова и подготовленные подсказки, с импортом и экспортом. Морфологию по языкам — для каждого языка витрины свой алгоритм словоформ. Разгрузку базы — товарная выдача, товарные блоки и поиск уходят в Elasticsearch.

Чего модуль не делает

  • Не устанавливает Elasticsearch. Модуль к нему подключается, сам сервер нужен свой.
  • Не работает без планировщика. Индекс поддерживают задания cron; без них новые товары в выдачу не попадут.
  • Не заменяет вёрстку магазина. Слой поиска рассчитан на UniTheme2, на других темах работает, но подгонку под дизайн лучше заложить в проект.
  • Не работает вместе с «Живым поиском» Cart-Power — при включении «Умного поиска» тот отключается автоматически.

Совместимость

CS-Cart и Multi-Vendor 4.17.1 – 4.21.1, все четыре редакции. PHP 7.4 – 8.3. Elasticsearch 8.x. Нужен модуль «Cart-Power: Менеджер модулей».

Посмотреть и почитать

Демо-магазин: — наберите в поиске cfvceyu, тошиба или телевизр и посмотрите, что получится.

Вопросы по модулю задавайте здесь — отвечаем в теме.

Модуль на Marketplace: Smart Search & Catalog on Elasticsearch for CS-Cart — Cart-Power
Там же, на странице модуля, — ссылка на живую демонстрацию и на документацию.

О! Приблизьтесь пожалуйста по функционалу и визуалу к https://home.mv.unitheme.net/ и сделайте чтобы адаптировалось под unitheme

Умный поиск 2.1

Вышло обновление модуля. Главное в нём — окно поиска, в котором покупателю проще сузить выдачу и некуда упереться.

Что нового

  • Панель категорий в окне поиска. Два вида: список категорий со счётчиками найденного и фильтр с флажками, чтобы выбрать несколько категорий сразу. Если включены оба, в окне появляется переключатель.
  • Экран «ничего не найдено». Вместо пустого окна — подсказка, популярные запросы и категории магазина.
  • Вкладка «Внешний вид» в настройках: режим окна, виды панели, число категорий в панели и товаров в группе.
  • Оформление из темы. Окно поиска берёт цвета кнопок, фон, цвет текста и основной шрифт темы магазина.
  • «Часто ищут» стал аккуратнее. Варианты одного запроса в другом регистре, раскладке или транслите склеиваются, опечатки показываются исправленными, а неуместный запрос скрывается одной командой в истории поиска.
  • Elasticsearch 9.x поддерживается наравне с 8.x, число реплик индексов подстраивается под число узлов: на одном сервере индексы больше не «жёлтые».
  • Исправлено: на Ultimate 4.17.1 и новее синхронизация категорий и компаний падала с ошибкой базы; в историю не попадали запросы со страницы результатов и все, кроме первого, запросы одного открытия окна; не применялась сортировка на странице результатов.

Панель категорий: у каждой категории число найденного, товары разложены по группам.

Фильтр категорий: отмеченные флажками категории сужают выдачу без закрытия окна.

Ничего не нашлось — покупатель видит популярные запросы и категории.

Совместимость

CS-Cart и Multi-Vendor 4.17.1 – 4.21.1, все четыре редакции. PHP 7.4 – 8.3. Elasticsearch 8.x или 9.x. Обновление приходит через «Менеджер модулей» Cart-Power; настройки и пароль Elasticsearch сохраняются.

Демонстрация, документация и полный список изменений — на странице модуля в Marketplace:

Вот уже то что нужно

1/ где посмотреть демо?
2/ где взять русскую морфологию?
3/ где взять список синонимов?

1/ Кажется то что надо
2/ Историю поиск еще добавьте


3/ странно ищет

4/ повторите логику автоподсказок как тут

5/ Фильтры свернутые должны быть

Кажется еще одна вам итерация очень внимательная на оригинал и мы будем брать

Умный поиск 2.2 и 2.3: покупатель уточняет выдачу, не выходя из окна поиска

Два обновления подряд — 2.2 и, по замечаниям из этой темы, 2.3. Почти всё про само окно поиска: раньше покупатель мог только смотреть найденное и переходить в категорию, теперь он уточняет выдачу прямо в окне.

Фильтры цены и бренда. В левой колонке под категориями встали два обычных раскрытых фильтра: цена с полями «от» и «до» — границы подставляются по самому дешёвому и самому дорогому из найденного — и бренды найденных товаров со счётчиком у каждого. Выдача пересчитывается на месте, переходить на страницу результатов не нужно. Оба фильтра включаются отдельными настройками: бренды берутся из характеристики бренда, цена по умолчанию выключена.

Цена и бренд под списком категорий: выдача сужается, не закрывая окно.

На телефоне фильтры не заслоняют товары. Категории, цена и бренд свёрнуты в ряд кнопок над выдачей; кнопка разворачивает свой блок, открыт не больше одного, выбор категории или «Применить» сворачивает его обратно. Товары видны с первого экрана.

Телефон: фильтры кнопками, нажата «Категории» — список раскрыт под рядом.

Плотный список. К сетке карточек добавился второй вид: строка с картинкой, названием, кодом, наличием, ценой и кнопкой «В корзину». На экран помещается вдвое больше товаров. Вид переключается кнопками в шапке выдачи и запоминается за посетителем, а с какого вида окно открывается — настройка.

Тот же запрос списком: видно больше товаров, каждый со своей ценой и наличием.

Подсказки. Подсказки из заведённых вами поисковых фраз и из истории запросов показываются одной строкой вместе с автодополнением по названиям: набранная часть обычным шрифтом, продолжение — жирным. Клик подставляет подсказку и запускает поиск. Сами фразы заводятся в панели: «CP: ElasticSearch → Поисковые фразы».

Строка исправления. Когда модуль исправил запрос — опечатку, раскладку или бренд, записанный кириллицей, — над выдачей видно, по какому запросу она показана, и можно одним кликом вернуться к своему написанию. Совпадения в названиях найденных товаров подсвечиваются.

Точнее по многословным запросам. Поиск по транслиту больше не приводит в выдачу товары, совпавшие только одним словом из трёх и более: по запросу «Футболка, Цвет: Черный» остаются футболки, а не всё чёрное.

Поиск голосом. В поле появилась кнопка микрофона: речь распознаёт сам браузер, звук на сервер не уходит, язык берётся из языка витрины. В браузерах без распознавания кнопки просто нет.

Клавиатура и мелочи. Окно управляется с клавиатуры: «/» открывает поиск, стрелки ходят по подсказкам и товарам, Enter открывает выбранное, Esc закрывает окно. Окно на всю ширину плавно выезжает сверху, число найденного стоит в шапке. Если поиск не отвечает, окно показывает это прямо, с кнопкой «Повторить».

Совместимость прежняя: CS-Cart и Multi-Vendor 4.17.1 – 4.21.1, все четыре редакции, Elasticsearch 8 и 9. Обновление ставится через центр обновлений.

Живая демонстрация и документация — на странице модуля в Marketplace: Smart Search & Catalog on Elasticsearch for CS-Cart — Cart-Power

Вопросы по версии задавайте здесь, в теме.

Умный поиск 3.0: продвижение товаров по запросу

Вышла версия 3.0 модуля «Умный поиск». Главное в ней — продвижение товаров по запросу: вы решаете, какие товары покупатель увидит первыми по выбранным запросам, а какие по этим запросам не показывать вовсе.

Что видит покупатель. Закреплённые товары идут первыми в заданном вами порядке и попадают в выдачу, даже если в их названии нет слов запроса. В окне поиска вместе с закреплённым товаром поднимается и его группа категорий. Исключённых товаров по этим запросам нет ни в выдаче, ни в подсказках автодополнения.

По запросу «телевизор» первым стоит телевизор Samsung 610 серии — его закрепило правило продвижения.

Правила. В панели появился раздел «Продвижение товаров» (Веб-сайт → CP: ElasticSearch). В правиле задаются запросы, закреплённые товары с позициями и исключённые товары. Запрос совпадает с правилом точно, по началу или по вхождению, в том числе после того, как модуль исправил раскладку или транслит. У правила есть срок действия, позиция среди правил и счётчик срабатываний.

Правило продвижения: запросы, тип совпадения, закреплённый товар и позиция среди правил.

Где работает. Правила действуют на странице результатов поиска и в окне поиска. Фильтры витрины работают как обычно, а если покупатель сам выбрал сортировку, закреплённые товары идут в общем порядке. В категориях и товарных блоках правила не действуют.

Модуль работает с CS-Cart и Multi-Vendor 4.17.1–4.21.1 и Elasticsearch 8 и 9. Обновление доступно в Менеджере модулей и в Центре обновлений. Демонстрация и документация — на странице модуля в Marketplace.