В Moguta.CMS поддерживается три типа поиска товаров по каталогу.
Можно настроить фильтры по товарам различным образом, например вы можете выводить фильтры по характеристикам вложенных категорий или фильтровать товар исключительно в конкретной категории.
По умолчанию, из коробки используется "Обычный" тип поиска по вхождению подстроки в названии товара или артикул. Реализовано это обычным оператором LIKE %...% в MySQL запросе. Но так же присутствует и два альтернативных механизма поиска: "Полнотекстовый" (FULTEXT) и "Морфологический" (SPHINX).
Чтобы поиск учитывал описание товара, можно переключить режим на полнотекстовый поиск, для этого в настройка панели управления, перейдите в раздел "Фильтры и поиск по сайту" и выберите из выпадающего списка "Полнотекстовый" тип поиска.
Переключение на полнотекстовый поиск ускорит поиск в объемных каталогах. Но данный способ поиска требует дополнительных настроек MySQL сервера на вашем хостинге. Например, по умолчанию в MySQL не будут искаться слова содержащие знаки дефиса, это может быть неудобно при поиске товара по артикулу или модельному номеру, также изначально поиск ищет только по словам не меньше 4-х букв. Чтобы изменить это на сервере в MySQl, необходимо отредактировать конфигурационный файл my.cnf
[mysqld] ft_min_word_len=3
После этого сервер необходимо перезагрузить, чтобы настройки применились.
Данный тип поиска не доступен начиная с версии 9.4 из-за перехода на новый тип хранения таблиц в базе InnoDB. Для полнотекстового поиска необходимо настраивать Sphinx.
Хотите поиск как в Yandex или Google? Тогда вам подойдет этот вариант. Самый удобный и качественный поиск в Moguta.CMS достигается путем использования поискового движка Sphinx! Официальный сайт движка: http://sphinxsearch.com/ Чтобы пользоваться этим поисковым движком необходимо установить его на вашем сервере.
Сложность заключается в том, что необходимо администрировать сервер, но не все хостинги позволяют это сделать. Для установки и настройки поискового движка Sphinx мы сделали две инструкции. Если не получилось по первой, то выполните вторую инструкцию.
Получаем надпись Complete!
Настройка Sphinx
Остановить sphinx можно так service searchd stop
Запустить sphinx можно так service searchd start
Установка из пакета скаченного с официального сайта http://sphinxsearch.com/downloads/release/ После установки необходимо будет заменить содержание конфигурационного файла /etc/sphinxsearch/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
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