Фильтры и поиск по сайту

В Moguta.CMS поддерживается три типа поиска товаров по каталогу.

Можно настроить фильтры по товарам различным образом, например вы можете выводить фильтры по характеристикам вложенных категорий или фильтровать товар исключительно в конкретной категории.

Видео

По умолчанию, из коробки используется "Обычный" тип поиска по вхождению подстроки в названии товара или артикул. Реализовано это обычным оператором LIKE %...% в MySQL запросе. Но так же присутствует и два альтернативных механизма поиска: "Полнотекстовый" (FULTEXT) и "Морфологический" (SPHINX).

Настройки поиска в Moguta.CMS

Тип поиска "Полнотекстовый" (FULLTEXT) 

Чтобы поиск учитывал описание товара, можно переключить режим на полнотекстовый поиск, для этого в настройка панели управления, перейдите в раздел "Фильтры и поиск по сайту" и выберите из выпадающего списка "Полнотекстовый" тип поиска.

Переключение на полнотекстовый поиск ускорит поиск в объемных каталогах. Но данный способ поиска требует дополнительных настроек MySQL сервера на вашем хостинге. Например, по умолчанию в MySQL не будут искаться слова содержащие знаки дефиса, это может быть неудобно при поиске товара по артикулу или модельному номеру, также изначально поиск ищет только по словам не меньше 4-х букв. Чтобы изменить это на сервере в MySQl, необходимо отредактировать конфигурационный файл my.cnf

[mysqld] ft_min_word_len=3

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

Данный тип поиска не доступен начиная с версии 9.4 из-за перехода на новый тип хранения таблиц в базе InnoDB. Для полнотекстового поиска необходимо настраивать Sphinx.

Тип поиска "Морфологический" (SPHINX)

Хотите поиск как в Yandex или Google? Тогда вам подойдет этот вариант. Самый удобный и качественный поиск в Moguta.CMS достигается путем использования поискового движка Sphinx! Официальный сайт движка: http://sphinxsearch.com/ Чтобы пользоваться этим поисковым движком необходимо установить его на вашем сервере.

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

Инструкция №1

  1. Подключаемся по SSH к вашему серверу
  2. Скачиваем RPM архив wget http://sphinxsearch.com/files/sphinx-2.3.2-1.rhel6.x86_64.rpm
  3. Устанавливаем Sphinx командой: sudo yum install -y sphinx-2.3.2-1.rhel6.x86_64.rpm

Получаем надпись Complete!

Настройка Sphinx

  1. Открываем файл настроек, который доступен тут /etc/sphinx/sphinx.conf
  2. Вставляем следующее содержимое, не забыв указать свои параметры для подключения к БД. Актуальные параметры доступа, для подключения к базе, можно взять в config.ini находящемся в корне сайте.

Копируем содержимое этого спойера в файл sphinx.conf
  1. Создаём новый индекс командой: sudo -u sphinx indexer --all --rotate
  2. В файл crontab прописываем задачу на переиндексацию базы, каждый час. @hourly /usr/bin/indexer --rotate --config /etc/sphinx/sphinx.conf --all

Остановить sphinx можно так service searchd stop
Запустить sphinx можно так service searchd start

Инструкция №2

Установка из пакета скаченного с официального сайта http://sphinxsearch.com/downloads/release/ После установки необходимо будет заменить содержание конфигурационного файла /etc/sphinxsearch/sphinx.conf на предоставленные ниже:


Копируем содержимое этого спойера в файл sphinx.conf

Когда конфиг будет изменен и сохранен, можно будет проиндексировать базу товаров, для этого в терминале запускаем индекс:

/usr/bin/indexer --all --rotate

Индекс прошел успешно если в папке /usr/local/sphinx/var/data/ создадутся подпапки product/ и property/ файлы с индексами, а в терминале должны увидеть что-то похожее:

Sphinx 2.2.11-id64-release (95ae9a6)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)

using config file '/etc/sphinxsearch/sphinx.conf'...
indexing index 'product'...
WARNING: Attribute count is 0: switching to none docinfo
collected 51 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 51 docs, 49931 bytes
total 0.096 sec, 515517 bytes/sec, 526.55 docs/sec
indexing index 'property'...
WARNING: Attribute count is 0: switching to none docinfo
collected 300 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 300 docs, 4449 bytes
total 0.014 sec, 304913 bytes/sec, 20560.61 docs/sec
total 6 reads, 0.000 sec, 16.4 kb/call avg, 0.0 msec/call avg
total 18 writes, 0.000 sec, 9.3 kb/call avg, 0.0 msec/call avg
rotating indices: successfully sent SIGHUP to searchd (pid=2390).

Дальше следует запустить сам поисковый движок командой: /usr/bin/searchd
После этого в файле config.ini, который находится в корне вашего сайта установите значение директив (В новых версиях это нужно сделать в настройках в панели управления, при выборе типа морфологического поиска)

EARCH_SPHINX = 1
SEARCH_SPHINX_HOST = "localhost"
SEARCH_SPHINX_PORT = "9312"

Теперь можно проверить результаты работы поиска на сайте. Поиск теперь будет учитывать не только названия товаров, артикулов, и описания, но также будет искать среди характеристик товаров. Помимо этого поиск будет учитывать словоформы. Если вы хотите настроить поисковую выдачу по особенным параметрам, то сделать это можно в файле /etc/sphinxsearch/sphinx.conf полагаясь на официальную документацию: http://sphinxsearch.com/docs/current.html

Инструкция №3
Если не получилось установить из готового пакета, то  можно собрать сервер из исходников следующим способом:
1. Скачиваем сфинкс и в терминале пишем следующее

wget -c "http://sphinxsearch.com/files/sphinx-2.2.11-release.tar.gz" && ls
tar -xf sphinx-2.2.11-release.tar.gz
cd sphinx-2.2.11-release

2. Устанавливаем необходимые библиотеки для работы и установки сфинкса

aptitude install g++
aptitude install libmysqlclient-dev

3. Теперь компилируем Sphinx из исходников скачаных на шаге 1:

./configure --with-mysql --prefix=/usr/local/sphinx

Если на этом этапе возникает ошибка "ERROR: cannot find MySQL include files.". в таком случае выполняем пункт 2 и 3 заново.

4. Теперь должно появиться сообщение "You can now run 'make install' to build and install Sphinx binaries".

5. Выполняем команду sudo make install . Если все прошло успешно, то на сервере появится папка по адресу /usr/local/sphinx

sudo make install

6. Копируем шаблон файла настроек, приведенный выше с настройками для Moguta.CMS и редактируем его содержимое под наши нужды:

cp /usr/local/sphinx/etc/sphinx.conf.dist /usr/local/sphinx/etc/sphinx.conf
nano /usr/local/sphinx/etc/sphinx.conf

Запускаем индексацию:

/usr/local/sphinx/bin/indexer --all --rotate

Запускаем Sphinx:

/usr/local/sphinx/bin/searchd

Осталось сделать чтобы Sphinx запускался сразу при загрузке/перезагрузке сервера, а также настроить периодичность индексирования данных создаем файл searchd в директории /etc/init.d/

nano /etc/init.d/searchd

Копипастим нижеприведенный скрипт в файл /etc/init.d/searchd :


#!/bin/bash
 
#!/bin/sh
### BEGIN INIT INFO
# Provides:          searchd
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Interactive:     true
# Short-Description: Stop/Start SphinxSearch Daemon
### END INIT INFO
 
case "${1:-''}" in
 
'start')
/usr/local/sphinx/bin/searchd
;;
 
'stop')
/usr/local/sphinx/bin/searchd --stop
;;
 
'restart')
/usr/local/sphinx/bin/searchd --stop
sleep 1
/usr/local/sphinx/bin/searchd
;;
 
*)
echo "Usage: $SELF start|stop|restart"
exit 1
;;
 
esac

Даем права на скрипт запуска и регистрируем его в автозапуске:

chmod +x /etc/init.d/searchd
update-rc.d searchd defaults

Для проверки перезапустим сервер и проверим запустился ли демон searchd:

reboot
ps ax | grep searchd

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

/etc/crontab

Дописываем в конец эту строчку:

0 0 * * * root /usr/local/sphinx/bin/indexer --rotate --all --config /usr/local/sphinx/etc/sphinx.conf

можно указать любой другой путь к файлу с конфигом


0 0 * * * root /usr/bin/indexer --rotate --all --config /etc/sphinx/sphinx.conf

Все готово!

Вы установили и настроили поисковый сервер Sphinx. Sphinx открывает порты 9312, 9306 (указанные в настройках) на всех интерфейсах, настоятельно рекомендуем прикрыть их при помощи фаервола на наружном интерфейсе. Вот два простых правила для IPTABLES. Где eth0 - имя наружного сетевого интерфейса.

ptables -A INPUT -p tcp -i eth0 --dport 9306 -j DROP
iptables -A INPUT -p tcp -i eth0 --dport 9312 -j DROP