Поиск

  • 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 используется новый, созданный с нуля функционал поиска. К основным изменениям нового поиска можно отнести следующее:

  1. Добавлен поиск с учетом перестановки слов - поиск по запросам "Планшет Android" и "Android планшет" даст одинаковую выдачу результатов.
  2. Поиск дополнен перебором слов, похожих в базе данных - поиск по слову "плоншет" будет находить как "планшет" и т.д.
  3. Добавлен морфологический поиск слова (с использованием падежей слова): теперь если посетитель вводит в поисковик слово "телефона" ему будет находить "телефон", если такой имеется в базе данных.

Также функционал дополнен возможностью поиска по транслитерации слов, например, слово "адидас" найдет товары с названием которое содержит "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 или же наоборот.