Sphinx и PHP 5.3.21
Пытаюсь завести сфинкс на PHP 5.3.21, где API сфинкса уже впилено в сам PHP:
Конечно, стало ругаться на то, что классы уже определены. Закомментил следующую строку в /classes/modules/sphinx/Sphinx.class.php:
Ошибки ушли, но поиск не дает результатов.
Самое странное, что подобной ситуации со встроенным в PHP сфинксапи вообще не гуглится.
Индексы создаются, но на сайте поиск выдает пустой результат. В какую сторону копать?
config.php поиска:
sphinx support enabled Version 1.1.0
Конечно, стало ругаться на то, что классы уже определены. Закомментил следующую строку в /classes/modules/sphinx/Sphinx.class.php:
require_once(Config::Get('path.root.engine').'/lib/external/Sphinx/sphinxapi.php');
Ошибки ушли, но поиск не дает результатов.
Самое странное, что подобной ситуации со встроенным в PHP сфинксапи вообще не гуглится.
Индексы создаются, но на сайте поиск выдает пустой результат. В какую сторону копать?
config.php поиска:
source site1 { type = mysql sql_host = localhost sql_user = site1_user sql_pass = 123123123 sql_db = site1 sql_port = 3306 # optional, default is 3306 sql_query_pre = SET CHARACTER_SET_RESULTS=cp1251 } source elements: site1 { sql_query_range = SELECT MIN(topic_id), MAX(topic_id) FROM phpbb_topics sql_range_step = 1000 sql_query = SELECT \ topic_id, \ forum_id, \ topic_title, \ topic_poster, \ topic_replies, \ topic_views, \ topic_last_post_id \ FROM \ phpbb_topics \ WHERE topic_id >= $start AND topic_id <= $end sql_attr_uint = topic_poster sql_attr_uint = topic_replies sql_attr_uint = topic_views sql_attr_uint = forum_id sql_attr_uint = topic_last_post_id } source posts: site1 { sql_query_pre = SET CHARACTER_SET_RESULTS=cp1251 sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(post_id) FROM phpbb_posts_text sql_query_range = SELECT MIN(post_id), (select max_doc_id from sph_counter) FROM phpbb_posts_text sql_range_step = 1000 sql_query = SELECT \ pt.post_id, \ p.poster_id, \ p.post_time, \ t.topic_id, \ t.forum_id, \ f.cat_id, \ p2.post_time as last_post_in_topic_time, \ pt.post_text as text, \ t.topic_title as title \ FROM \ phpbb_posts_text pt \ INNER JOIN \ phpbb_posts p on p.post_id = pt.post_id \ INNER JOIN \ phpbb_topics t on p.topic_id = t.topic_id \ INNER JOIN \ phpbb_posts p2 on t.topic_last_post_id = p2.post_id \ INNER JOIN \ phpbb_forums f on t.forum_id = f.forum_id \ WHERE pt.post_id >= $start AND pt.post_id <= $end sql_attr_uint = last_post_in_topic_time sql_attr_uint = poster_id sql_attr_uint = topic_id sql_attr_uint = forum_id sql_attr_uint = cat_id sql_attr_timestamp = post_time } source delta: posts { sql_query_pre = SET CHARACTER_SET_RESULTS=cp1251 sql_query_range = SELECT (select max_doc_id from sph_counter), MAX(post_id) FROM phpbb_posts_text } index topics { docinfo = extern morphology = stem_enru stopwords = min_word_len = 1 charset_type = sbcs charset_table = 0..9, A..Z->a..z, _, a..z, U+A8->U+E5, U+B8->U+E5, U+C0..U+DF->U+E0..U+FF, U+E0..U+FF min_prefix_len = 0 min_infix_len = 0 path = /var/lib/sphinx/site1/topics source = elements html_strip = 1 } index doubles: topics { source = elements path = /var/lib/sphinx/site1/doubles } index posts: topics { path = /var/lib/sphinx/site1/posts source = posts } index delta: posts { path = /var/lib/sphinx/site1/delta source = delta } source site2 { type = mysql sql_host = localhost sql_user = site2ls_user sql_pass = 123123123 sql_db = site2ls 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 topicsSource : site2 { 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_date_add sql_attr_multi = uint tag from query; SELECT topic_id, topic_tag_id FROM prefix_topic_tag sql_ranged_throttle = 0 } source commentsSource : site2 { 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 AND comment_publish=1 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 topicsIndex { source = topicsSource path = /var/lib/sphinx/site2/topicIndex docinfo = extern mlock = 0 morphology = stem_enru charset_type = utf-8 html_strip = 1 html_remove_elements = style, script, code } index commentsIndex { source = commentsSource path = /var/lib/sphinx/site2/commentsIndex docinfo = extern mlock = 0 morphology = stem_enru charset_type = utf-8 html_strip = 1 html_remove_elements = style, script, code } indexer { mem_limit = 100M } searchd { listen = localhost:3312 log = /var/log/sphinx/searchd.log query_log = /var/log/sphinx/query.log read_timeout = 5 max_children = 30 pid_file = /var/run/sphinx/searchd.pid max_matches = 10000 seamless_rotate = 1 preopen_indexes = 0 unlink_old = 1 }
40 комментариев
Сфинкс работает по порту 3312.
В первый пост добавил конфиг сфинкса.
Наличие индексных файлов ещё не означает что с ними всё в порядке.
Ровно с этими конфигами все работало раньше, т.е. они 100% рабочие, но вот почему LS не получает результата поиска — вопрос.
Сфинкс слушает 9312 порт там?
Для порта вроде как есть отдельная директива port в секции searchd.
Правда не помню с какой версии.
У меня стоит сейчас 2.0.6, но точно помню, что в 0.8.х, который раньше как-то ставил, я убирал директиву порт, т.к. с ней не работало. Ее снова вернули в обиход?
и я понимаю, что это про сфинкс, но ни при поиске ни при перезапуске демона такая строка не появляется и откуда она берется никак не пойму.
Меня, в этой связи, сильно смущает — конфиг nginx. Он поставился сам и я его подкорректировал в сторону работы с php5-fpm, но у меня нет директивы site-aviable или site-enable, т.е. все сразу в nginx.config прописалось. Может он глючный (я половину дефолтных команд не очень понимаю) и перенаправляет куда-нибудь? Посмотрите, пожалуйста:
Я уже просто не знаю, что еще посмотреть. У меня сейчас стоит чистый debian 6 с апачем, поиск через консоль так же работает, но сайт ничего не выводит…
Копаю дальше)
Кто нибудь может точно сказать что должно быть в правой части
/**
* Конфиг модуля «search»
*/
$config['entity_prefix'] = '';
Я где то здесь на этом сайте видел такое
а особенно здесь livestreet.ru/blog/questions/11067.html Я сделал как по второй ссылке, на двух сайтах все отлично работает.
Следовательно, решением проблемы была замена 72-й строки файла Sphinx.class.php
на
Решение, конечно, не ахти, но во всяком случае работает. Может кому-то эта информация будет полезна. Будем надеяться, что в следующем обновлении Livestreet подобной проблемы не будет.