Sphinx на Alto CMS

В девелоперской версии обновлен плагин Sphinx. Что же там нового:
  • Разумеется, исправлены некоторые баги
  • Во внешние библиотеки добавлены два файла — для Sphix версии 1.х и для 2.х
  • Конфигурация Sphinx'а доработана с учетом http://livestreet.ru/13482.html
  • Наконец, следуя концепции юзер-френдли, предусмотрена автогенерация файла sphix.conf

Не буду здесь описывать установку самого Sphinx, пока будем считать, что те, кто хочет его использовать на своем сайте, знают, как это делать. Опишу лишь настройку плагина. В перспективе будет, конечно, настройка через админку, но пока правим базовый конфиг руками здесь:
/plugins/sphinx/config/config.php. Комментарии там, на мой взгляд, весьма подробные, разберетесь без труда. Но отмечу несколько нюансов:

1) Настройка и тестирование плагина проводились по Sphinx 2.0.8 (последняя стабильная версия)

2) В параметре $config['host'] пишем не просто хост, а хост и порт или просто порт. Примеры:
$config['host'] = '127.0.0.1:9312'; // хост - 127.0.0.1, порт - 9312
$config['host'] = 'localhost'; // хост - localhost, порт - по умолчанию
$config['host'] = '9312'; // хост - по умолчанию, порт - 9312
$config['host'] = '/var/run/searchd.sock'; // подключение через сокет
3) Параметр $config['prefix'] — это НЕ префикс таблиц в базе, это префикс файлов, создаваемых Sphinx'ом

4) В $config['path'] нужно указать папку на сервере, куда Sphinx будет складывать свои данные. Вам выбирать, где она будет — в пределах ли корневой папки сайта или где-то в глубинах сервера, главное, чтоб она была, и чтоб Sphinx имел соответствующие права для работы с этой папкой.

5) И, наконец, весьма полезная вещь: после настройки конфиг-файла и активации плагина по адресу site.com/sphinx/config/ Вы можете получить полный текст файла sphinx.conf с учетом всех настроек. Этот файл можно положить в рабочую папку, которую Вы указали в $config['path'] (или куда посчитаете нужным). И, кстати, в той же папке нужно будет создать две подпапки — для данных и для логов. Имена этих подпапок см. в самом верху сгенерированного файла sphinx.conf.

Надеюсь, настройка Sphinx'а теперь будет гораздо проще.

UPD. Забыл сказать еще об одной важной фишке: если при обращении к Sphinx возникают ошибки, то они не улетаю втихую в никуда, а аккуратно складываются в лог ошибок. И их можно увидеть в админке в разделе «Ошибки системы»

Похожие статьи

  • Как заменить файл tpl через плагин?
    Привет всем! Пишу плагин, в нём нужно заменить файл модального окна modal.write.tpl на мой собственный. Для этого в файле PluginMyplugin.class.php я заполняю $aDelegates: public $aDelegates = array( '...
  • Ошибка в плагине «Гостевые комментарии»
    Устанавливаю плагин «Гостевые комментарии», побывал разные версии: из каталога 1.1.9 и с гитхаба 1.1.10 на AltoCMS 1.1.29 В настройках указываю обязательный email адрес, нажимаю сохранить и вылетает такая ошибка...
  • Не работает плагин
    Установил плагин от LS «Публикация от чужого имени» github В комментариях плагин работает, а вот при создании / редактирования топика не работает, даже форма не отображается с выбором пользователя. На предыдущих...
  • Разработка плагина брендирования
    Всем доброго времени суток. Необходимо разработать плагин брендирования для Альто 1.1.+ Кратко о хотелках: 1. Брендирование главной 2. Брендирование блогов в том числе и личных 3. Брендирование отдельных постов....

20 комментариев

0
Обновил папку engine и сам плагин — не ищет нифига. Проблема в том, что у меня 2 сайта на LS и один на altocms, для всех трех сайтов создан один sphinx.conf
На сайтах LS все ищет нормально, на alto пока не получается. Вот мой sphinx.conf
source multiSource
{
type=mysql
sql_host=localhost
sql_user=user
sql_pass=pass
sql_db=base_1
sql_port=3306
sql_sock=/var/run/mysqld/mysqld.sock
mysql_connect_flags=32
sql_query_pre=SET NAMES utf8
sql_query_pre=SET SESSION query_cache_type=OFF
}
source multiTopics : multiSource
{
sql_query= \
SELECT t_fast.topic_id, t_fast.topic_title, UNIX_TIMESTAMP(t_fast.topic_date_add) as topic_date_add, \
                tc.topic_text, t_fast.topic_publish \
                FROM prefix_topic as t_fast, prefix_topic_content AS tc \
                WHERE t_fast.topic_id=tc.topic_id AND t_fast.topic_id>=$start AND t_fast.topic_id<=$end

sql_query_range=SELECT MIN(topic_id),MAX(topic_id) FROM prefix_topic
sql_range_step=1000
sql_attr_uint=topic_publish
sql_attr_timestamp=topic_data_add
sql_attr_multi=uint tag from query; SELECT topic_id, topic_tag_id FROM prefix_topic_tag
sql_ranged_throttle=0
}
source multiComments : multiSource
{
sql_query=\
                        SELECT comment_id, comment_text, UNIX_TIMESTAMP(comment_date) as comment_date, comment_delete \
                        FROM prefix_comment \
                       WHERE target_type='topic' AND comment_id>=$start AND comment_id<=$end


sql_query_range=SELECT MIN(comment_id),MAX(comment_id) FROM prefix_comment
sql_range_step=5000
sql_attr_uint=comment_delete
sql_attr_timestamp=comment_date
}
index multitopicsIndex
{
source=multiTopics
path=/var/lib/data/multiTopics
docinfo=extern
mlock=0
morphology=stem_enru
charset_type=utf-8
html_strip=1
html_remove_elements=style,script,code
}
index multicommentsIndex
{
source=multiComments
path=/var/lib/data/multiComments
docinfo=extern
mlock=0
morphology=stem_enru
charset_type=utf-8
html_strip=1
html_remove_elements=style,script,code
}

####################################################################################
source ptzonlineSource
{
type=mysql
sql_host=localhost
sql_user=user
sql_pass=pass
sql_db=base_2
sql_port=3306
sql_sock=/var/run/mysqld/mysqld.sock
mysql_connect_flags=32
sql_query_pre=SET NAMES utf8
sql_query_pre=SET SESSION query_cache_type=OFF
}
source ptzonlineTopics : ptzonlineSource
{
sql_query= \
SELECT t_fast.topic_id, t_fast.topic_title, UNIX_TIMESTAMP(t_fast.topic_date_add) as topic_date_add, \
                tc.topic_text, t_fast.topic_publish \
                FROM prefix_topic as t_fast, prefix_topic_content AS tc \
                WHERE t_fast.topic_id=tc.topic_id AND t_fast.topic_id>=$start AND t_fast.topic_id<=$end

sql_query_range=SELECT MIN(topic_id),MAX(topic_id) FROM prefix_topic
sql_range_step=1000
sql_attr_uint=topic_publish
sql_attr_timestamp=topic_data_add
sql_attr_multi=uint tag from query; SELECT topic_id, topic_tag_id FROM prefix_topic_tag
sql_ranged_throttle=0
}
source ptzonlineComments : ptzonlineSource
{
sql_query=\
                        SELECT comment_id, comment_text, UNIX_TIMESTAMP(comment_date) as comment_date, comment_delete \
                        FROM prefix_comment \
                       WHERE target_type='topic' AND comment_id>=$start AND comment_id<=$end


sql_query_range=SELECT MIN(comment_id),MAX(comment_id) FROM prefix_comment
sql_range_step=5000
sql_attr_uint=comment_delete
sql_attr_timestamp=comment_date
}
index ptzonlinetopicsIndex
{
source=ptzonlineTopics
path=/var/lib/data/ptzonlineTopics
docinfo=extern
mlock=0
morphology=stem_enru
charset_type=utf-8
html_strip=1
html_remove_elements=style,script,code
}
index ptzonlinecommentsIndex
{
source=ptzonlineComments
path=/var/lib/data/ptzonlineComments
docinfo=extern
mlock=0
morphology=stem_enru
charset_type=utf-8
html_strip=1
html_remove_elements=style,script,code
}

########################################################################################

source ptzmediaSource
{
type=mysql
sql_host=localhost
sql_user=user
sql_pass=pass
sql_db=base_3
sql_port=3306
sql_sock=/var/run/mysqld/mysqld.sock
mysql_connect_flags=32
sql_query_pre=SET NAMES utf8
sql_query_pre=SET SESSION query_cache_type=OFF
}
source ptzmediaTopics : ptzmediaSource
{
sql_query= \
SELECT t_fast.topic_id, t_fast.topic_title, UNIX_TIMESTAMP(t_fast.topic_date_add) as topic_date_add, \
                tc.topic_text, t_fast.topic_publish \
                FROM alto_topic as t_fast, alto_topic_content AS tc \
                WHERE t_fast.topic_id=tc.topic_id AND t_fast.topic_id>=$start AND t_fast.topic_id<=$end

sql_query_range=SELECT MIN(topic_id),MAX(topic_id) FROM alto_topic
sql_range_step=1000
sql_attr_uint=topic_publish
sql_attr_timestamp=topic_data_add
sql_attr_multi=uint tag from query; SELECT topic_id, topic_tag_id FROM alto_topic_tag
sql_ranged_throttle=0
}
source ptzmediaComments : ptzmediaSource
{
sql_query=\
                        SELECT comment_id, comment_text, UNIX_TIMESTAMP(comment_date) as comment_date, comment_delete \
                        FROM alto_comment \
                       WHERE target_type='topic' AND comment_id>=$start AND comment_id<=$end


sql_query_range=SELECT MIN(comment_id),MAX(comment_id) FROM alto_comment
sql_range_step=5000
sql_attr_uint=comment_delete
sql_attr_timestamp=comment_date
}
index ptzmediatopicsIndex
{
source=ptzmediaTopics
path=/var/lib/data/ptzmediaTopics
docinfo=extern
mlock=0
morphology=stem_enru
charset_type=utf-8
html_strip=1
html_remove_elements=style,script,code
}
index ptzmediacommentsIndex
{
source=ptzmediaComments
path=/var/lib/data/ptzmediaComments
docinfo=extern
mlock=0
morphology=stem_enru
charset_type=utf-8
html_strip=1
html_remove_elements=style,script,code
}

indexer
{
mem_limit=512M
}searchd
{
listen=127.0.0.1:3312
log=/var/log/sphinx/searchd.log
query_log=/var/log/sphinx/query.log
read_timeout=5
max_children=30
pid_file=/var/log/sphinx/searchd.pid
max_matches=100000
}
0
Для удобства я отделил секции сайтов здесь в конфиге такой линией
################################################################################

Что мне немного непонятно… вот на двух сайтах LS там у меня две разные базы данных, но префикс у них одинаковый prefix_… На сайте с altocms префикс базы alto_

В файлах модулей поиска прописано

для первого сайта
/**
 * Конфиг модуля "search"
 */
$config['entity_prefix']  = 'base_1';
$config['sphinx']['host'] = 'localhost';
//$config['sphinx']['host'] = 'unix:/var/run/sphinx.socket';

$config['sphinx']['port'] = '3312';

return $config;
?>


для второго сайта

/**
 * Конфиг модуля "search"
 */
$config['entity_prefix']  = 'base_2';
$config['sphinx']['host'] = 'localhost';
//$config['sphinx']['host'] = 'unix:/var/run/sphinx.socket';

$config['sphinx']['port'] = '3312';

return $config;
?>


Тут я не знаю, что должно быть в правой части вот этого
$config['entity_prefix'] =
какие префиксы непонятно… сейчас у меня там прописаны 'БД'.
0
Для сайта на alto в конфиге плагина sphinx прописано:

$config['host'] = '127.0.0.1:3312';
$config['db_socket'] = '/var/run/mysqld/mysqld.sock';

$config['prefix'] = Config::Get('db.params.dbname') . '_' . Config::Get('db.table.prefix');

$config['path'] = '/var/lib/sphinxsearch/';

return $config;
0
Зашел по адресу мой сайт на альто/sphinx/config почитал sphinx.conf — тоже многое непонятно… вот у меня префикс таблиц к базе на альто такой alto_ а в вашем конфиге почему то прописаны такие запросы
source ptzmedia_alto_topicsSource : ptzmedia_alto_dbSource
{                                                               
    sql_query = \
        SELECT t.topic_id, t.topic_title, UNIX_TIMESTAMP(t.topic_date_add) as topic_date_add, \
        tc.topic_text, t.topic_publish, b.blog_title, u.user_login \
        FROM prefix_topic t, prefix_topic_content tc, prefix_blog b, prefix_user u \
        WHERE t.topic_id=tc.topic_id AND t.topic_publish=1 \
        AND b.blog_id=t.blog_id AND t.user_id=u.user_id \
        AND t.topic_id>=$start AND t.topic_id<=$end

Должно вроде как быть не prefix_topic t а alto_topic t.
В общем пока поиск не работает, прошу дать наводку куда копать. Наверное все таки в конфиге плагина у меня неправильно настроено. Или я криво установил сам sphinx… я даже точно не понимаю где он у меня находится. Конфиг он использует отсюда /etc/sphinxsearch/sphinx.conf Вся индексируемая хрень складывается в /var/lib/data И еще такой же самый sphinx.conf лежит тут /usr/local/sphinx/etc… Помогите настроить пожалуйста для alto.
0
Во-первых, с префиксом таблиц есть баг, это верно. В SQL-выражениях должно быть «alto_», а не «prefix_», упустил я этот момент при генерации sphix.conf. Сейчас исправил в плагине, но у Вас правильно уже стоит.

Теперь давайте дальше разбираться. Префикс данных Сфинкса, как я вижу у Вас в sphix.conf в третьей секции стоит «ptzmedia», и индексируемая хрень складывается в /var/lib/data. Значит, в /plugins/sphinx/config/config.php должно быть так:
$config['host'] = 'localhost:3312';
$config['db_socket'] = '/var/run/mysqld/mysqld.sock';
$config['prefix'] = 'ptzmedia';
$config['path'] = '/var/lib/data/';

return $config;
И если всю папку engine обновили, то ошибки Сфинкса должны логгироваться. Если поиск не заработает — смотрите в админке в разделе «Ошибки системы», там Сфинкс должен ошибки отложить, которые натолкнут на мысль, куда копать
0
Отлично! Прописал как выше указано, поиск заработал. Посмотрел в админке предыдущие ошибки системы, там написано такое:
PluginSphinx_ModuleSphinx: unknown local index 'ptzmedia_alto_commentsIndex' in search request
query:топик
index:ptzmedia_alto_commentsIndex
filters:comment_delete=(0)

И такое
PluginSphinx_ModuleSphinx: unknown local index 'ptzmedia_alto_topicsIndex' in search request
query:топик
index:ptzmedia_alto_topicsIndex
filters:topic_publish=(1)

Это то что было, очистил лог ошибок, снова запустил поиск на сайте — ошибок нет. Спасибо огромное.
0
C поиском проблему решили, Вадим подскажи пожалуйста делается ли что нибудь для исправления ошибок с темами bootstrap и mono вот там altocms.ru/blog/questions/54.html в конце топика я писал.
0
При тестировании поиска а сайте выдает ошибку
Exception: Class "ModuleSphinx" not found!
See details in error.log
Сфинкс на сервере установлен, конфиг сфинкса на несколько сайтов, один из которых на альто, другие на лс, на лс поиск работает. Выше обсуждалась проблема, но дело в том, что сейчас речь даже не о том что поиск не ведется, а не хватает какого то модуля, для начала хотелось бы эту проблему решить?
0
Был такой баг, и он исправлен в девелоперской версии (которая на гитхабе сейчас)
0
Мне обновить только плагин или версию движка полностью?
0
Выше товарищ пишет:
Обновил папку engine и сам плагин...
Скорее всего, этого будет достаточно
0
Обновил папку engine с гитхаба и полетела верстка, кеш чистил, пришось вернуть engine из версии 0.9
0
Подскажите пож, что указывать в строке конфига
$config['prefix'] = Config::Get('db.params.dbname') . '_' . Config::Get('db.table.prefix');
0
Ничего. Строка специально сформирована так, чтоб в ней ничего менять не пришлось в подавляющем большинстве случаев.
0
Что то на версии 1.0.7 не хочет работать поиск:
Остановил демона, запускаю searchd — выдает:
WARNING: index 'alto_prefix_topicsIndex': preload: failed to open /var/lib/data/data/alto_prefix_data/topicsIndex.sph: No such file or directory; NOT SERVING
precaching index 'alto_prefix_commentsIndex'
WARNING: index 'alto_prefix_commentsIndex': preload: failed to open /var/lib/data/data/alto_prefix_data/commentsIndex.sph: No such file or directory; NOT SERVING

Папки .../data/alto_prefix_data/ дополнительно создал, возможность записи в них есть.

Запускаю индексацию indexer --all --rotate

Выдает такую хрень

indexing index 'alto_prefix_topicsIndex'...
ERROR: index 'alto_prefix_topicsIndex': sql_connect: Can't connect to local MySQL server through socket '' (111) (DSN=mysql://zaox:***@localhost:3306/sovunion).
total 0 docs, 0 bytes
total 0.000 sec, 0 bytes/sec, 0.00 docs/sec
indexing index 'alto_prefix_commentsIndex'...
ERROR: index 'alto_prefix_commentsIndex': sql_connect: Can't connect to local MySQL server through socket '' (111) (DSN=mysql://zaox:***@localhost:3306/sovunion).


Данные для доступа к базе прописаны в секции конфига правильно:
sql_host = localhost
sql_user = мой юзер
sql_pass = мой пароль
sql_db = моя база
sql_port = 3306

В чем может быть проблема друзья?
0
Версия sphinx 2.0.4
0
В журнале ошибок такое:
PluginSphinx_ModuleSphinx: connection to 127.0.0.1:9312 failed (errno=111, msg=в соединении отказано)
query: всех
index:alto_prefix_commentsIndex
filters:comment_delete=(0)

У меня один конфиг сфинкса на несколько сайтов, что удивительно на остальных сайтах на LS все индексируется и поиск работает. Где то я ошибся… но как понять… с секцией конфига сайта на альто что только не делал… и по аналогии с сайтами LS делал — все равно поиск не работает:(
Отредактирован:
0
Не поможет?
stackoverflow.com/questions/14536194/sphinx-restart-search-demon-issue-for-reindexing-delta-indexes

Что этот сфинкс-то дает в итоге? Многие пользователи вообще поиск-то нажимают?
0
Ну на сайте он выдает просто: «Удивительно, но поиск не дал результатов», а в консоли выдает хрень что я писал выше. Пользователей на сайте пока нет и неизвестно когда будут:) Но сфинкс установлен… почему бы не работать ему вместе с другими и на alto… Пока отключил плагин sphinx — обычный поиск работает.
0
connection to 127.0.0.1:9312 failed (errno=111, msg=в соединении отказано)
Думаю, сообщение «в соединении отказано» намекает на проблемы с правами
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.