Поиск
- 1. Обзор
- 2. Настройки
- 2.1. Настройки поиска в Настройки магазина
- 2.1.1 тип "Полный поиск"
- 2.1.2 тип "Частичный поиск"
- 2.1.3 тип "Точный поиск"
- 3. Кнопка "Обновление индексов товаров"
- 4. Таблица в БД shop_products_words
- 5. Двойной запрос
- 6. Поиск в мультиязычном магазине
- 7. Частые ошибки
1. Обзор
Начиная с версии 4.10, в системе ImageCMS используется новый, созданный с нуля функционал поиска. К основным изменениям нового поиска можно отнести следующее:
- Добавлен поиск с учетом перестановки слов - поиск по запросам "Планшет Android" и "Android планшет" даст одинаковую выдачу результатов.
- Поиск дополнен перебором слов, похожих в базе данных - поиск по слову "плоншет" будет находить как "планшет" и т.д.
- Добавлен морфологический поиск слова (с использованием падежей слова): теперь если посетитель вводит в поисковик слово "телефона" ему будет находить "телефон", если такой имеется в базе данных.
Также функционал дополнен возможностью поиска по транслитерации слов, например, слово "адидас" найдет товары с названием которое содержит "adidas".
В новом поиске перебор слов используется через поисковой алгоритм, в связке с Metaphone и Distance Levenshtain, каждое не найденное в базе данных слово хэшируется в специальный набор символов.
Затем с помощью Distance Levenshtain измеряется допустимое расстояние отличия символов, после чего слова, которые проходят допустимое расстояние (1, 2 или 3 символа в зависимости от длины слова), добавляются в список слов, по которым идет поиск.
В целом поиск осуществляется по:
- названию товара;
- названию варианта;
- артикулу;
- по строго введенным пользователем словам ( начиная от 3-х символов).
Для настройки поиска необходимо использовать раздел настроек магазина, а также кнопку "Обновление индексов товаров" (элемент общего списка товаров).
Функционал поиска, используемый на страницах магазина, не имеет никакого отношения к модулю "Поиск", который находится в общем списке модулей - модуль "Поиск", в списке модулей, используется только для поиска в админпрофиле и не подлежит настройке.
Модуль "Поиск" должен быть ДЕАКТИВИРОВАН из автозагрузки в списке всех модулей для корректной работы функционала поиска.
2. Настройки
Настройки поиска необходимо осуществлять через:
Раздел настроек магазина: "Настройки" → "Настройки магазина" → "Настройки поиска":
Элемент общего списка товаров, кнопку "Обновление индексов товаров":
2.1. Настройки поиска в Настройки магазина
В данном раздели вы можете указать тип (логику) поиска, осуществляемого пользователем на страницах сайта.
Для перехода к настройкам вам необходимо осуществить переход в админ профиле: "Настройки" → "Настройки магазина" → "Настройки поиска".
В открывшейстя форме настроек, присутствует только одно поле "Тип поиска", с выпадающим списком, при помощи которого можно определить один и трех возможных типов (логик) поиска.
Также в форме предусмотрена всплывающая подсказка для администратора, содержащая краткое описание типов поиска.
После изменения - настройки поиска необходимо сохранить и очистить кеш.
2.1.1 тип "Полный поиск"
Полный поиск ведет поиск слова сразу в названии товара и названии варианта, после чего ищет по артикулу товара. Наиболее полный поиск, (наиболее ресурсоемкий, желательно использовать в магазинах с количеством товаров до 10 тысяч).
Данный тип поиска использует FullText
2.1.2 тип "Частичный поиск"
Этот поиск ищет сначала в названии товара, после чего, если не было совпадений, поиск идет по названию варианта и уже потом, если не было результатов, ищет по артикулу (полнотекстовый поиск в MySQL, самый оптимальный вариант поиска).
Данный тип поиска использует FullText
2.1.3 тип "Точный поиск"
Использует конструкцию LIKE, поэтому данный метод является наиболее точным, т.к.находит слова короче 3-х символов. Он удобен для сайтов, где названия товаров короче 3-х символов, но менее гибкий (без возможности перебора слов и морфологического анализа).
3. Кнопка "Обновление индексов товаров"
Данная кнопка находится в общем списке товаров, в правом верхнем углу:
При помощи данной кнопки функционал системы разбивает названия товаров на отдельные части (слова, от 3 символов длинной) и автоматически вносит их в таблицу базы данных.
Например: Товар с названием "Слинг-шарф для детей до 3-х лет" будет после обновления индекса товаров разделено на отдельные ключевые слова, используемые в поиске, а именно на: "слинг" "шарф" "детей" - так как эти слова состоят из более чем трех символов и они попадут в индекс внутреннего поиска. При этом:
- "для" и "лет" - выпадают (слова состоят из трех символов)
- "до" - выпадает (слово состоит из меньше чем из трех символов)
- "3-х" - будет разделено на "3" и на "х" (из-за дефиса), соответственно эта часть выпадет из индекса, как единичный символ.
В последующем, полученные данные будут использованы системой для поиска товаров по запросу пользователя.
Полученные таким образом данные прописываються в таблице базы данных shop_products_words
Рекомендуем обновлять индексы товаров после каждого наполнения магазина товарами или после их редактирования, в случаях если при редактировании изменялось название товара.
Обновление индексов работает только для точного и частичного типа поиска.
4. Таблица в БД shop_products_words
Полученные при обновлении индекса товаров производные от названий товаров ключевые слова, записываются в таблице базы данных shop_products_words
5. Двойной запрос
Новый модуль поиска также предусматривает возможность поиска по двойным запросам (только при полном или частичном типе поиска), то есть, если пользователь вводит 2 ключевых слова, которые нигде не сочитаются в вашем магазине (ни в одном товаре) - то в выборке будут представлены совокупные данные по каждому ключевому слову (все товары, по каждому отдельному ключевому слову)
При этом поиск игнорирует сторонние символы в запросе, используя только слова из индекса товаров:
6. Поиск в мультиязичном магазине
Настроить тип поиска отдельно для каждого языка можно, переключив основной язык сайта в "Настройки" → "Языки" на требуемый, а затем , пройдя в "Каталог товаров" → "Список товаров", обновить Индес товаров для поиска в выбранной ранее локализации.
При этом, в таблице базы данных shop_products_words создадутся индексы искомых товаров для данной локализации.
Все выше описанное будет доступно только при условии, что категории товаров сами товары и их варианты также имею несколько локализаций (переведены на другие языки).
Функционал полноценной мультиязычности доступен только для пользователей ImageCMS Shop Premium и облачного решения Premmerce (тарифы Business и Premium).
7. Частые ошибки
При поиске товара (пример) AE310001 выдает товар AE310002
В файле BaseSeach/application/modules/shop/classes/Search/BaseSearch.php
или в участке кода (строка 351)
private function distanceLivenshtineSearch($my_word, $item, $key) {
if (levenshtein(metaphone($my_word), metaphone($item)) <= mb_strlen(metaphone($my_word)) / 2 ) {
/** Заменив в конце условия / 2 -1 увеличитса диапазон поиска */
if (levenshtein($my_word, $item) <= mb_strlen($my_word) / 2 / 2) {
$this->setCorrect($key);
}
}
}
убрать / 2
или в файле BaseSeach/application/modules/shop/classes/Search/BaseSearch.php
1 - переместить строку
в блок
в итоге должно быть:
2 - переименовать переменную (строка 140)
с - $words = explode(' ', $productsName);
на - $words = explode(' ', $product);
Сортировка товаров в выпадающем окне поиска в обратном порядке:
В файле \application\modules\shop\models\SProductsQuery.php в блоке public function globalSort($order_method) выбираете нужный способ сортровки (или все) и изменяете ASC на DESC или же наоборот.