Mac Posted September 4, 2014 Share Posted September 4, 2014 Настроил по примеру sphinx.conf, который генерируется через ACP. Заменил лишь параметр с кодировкой sbcs на utf-8. Поиск вроде ищет, но, например, если зайти в общую форму поиска и сделать поиск по автору, а вывод в виде сообщений, то выводятся не все сообщения. Разницу можно наблюдать, если зайти к этому же автору в профиль и кликнуть по "Найти весь контент". Кроме того, не ищет записей в блогах, комментарии. Техподдержка IPB умыла руки, дескать, Sphinx стороннее ПО и не входит в техподдержку. Непонятно, зачем тогда было официально заявлять поддержку сфинкса и включать его в стандартный функционал. БД в utf8_general_ci, таблицы в InnoDB. База 2.5 Gb. Просьба ко всем, кто пользуется поиском Sphinx, проверить данные симптомы у себя. Я сам проверил на паре форумов - ошибка присутствует, но владельцы, видимо, не в курсе. Хочется выяснить, проблема конкретно у меня, или это глобальный косяк скриптов IPB. Link to comment Share on other sites More sharing options...
danilka Posted September 4, 2014 Share Posted September 4, 2014 Нужно конфиги формирования индекса сфинкса смотреть и запросы к апи сфинкса, которые выдергивают айдишки найденных постов из индекса. И да, если у вас критерию поиска соотвествует 2000 постов, а у сфинкса указан лимит выдачи 1000, то он выдаст всего 1000. Link to comment Share on other sites More sharing options...
siv1987 Posted September 4, 2014 Share Posted September 4, 2014 Не все это сколько? Какие сообщения не находятся? Скорее всего да, стоит ограничение как и в стандартном поиске. Link to comment Share on other sites More sharing options...
Mac Posted September 4, 2014 Author Share Posted September 4, 2014 Конфиг совершенно стандартный - тот, что генерируется в админке: ############################################################################### searchd settings############################################################################# 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 = 1000 seamless_rotate = 0 preopen_indexes = 0 unlink_old = 1} # --eof-- @danilka, интересная мысль. Действительно, max_matches = 1000. Попробую увеличить. Может поможет.А вот с блогами можно поподробнее, как мне это сделать? @siv1987, если я правильно понимаю, при клике по "Найти весь контент" поиск осуществляется без использования сфинкса прямым запросом по id юзера, потому выдает полный и правильный ответ. А если я ищу по нику автора поста, то используется сфинкс. Сейчас посчитал количество результатов - и вправду ровно 1000. Link to comment Share on other sites More sharing options...
siv1987 Posted September 4, 2014 Share Posted September 4, 2014 И sphinx и SQL поиск имеют методы viewNewContent и viewUserContent. И если выбран сфинкс как поисковой движок, искать должен сфинкс. Не ищет он в новых публикациях если в настройках поиска выбрано "Новые публикации должны использовать только SQL".viewUserContent еще использует настройку - Ограничить "Темы/Сообщения этого пользователя" результатами за X дней (search_ucontent_days). Хотя она находится в группе сфинкса, используется она также и при SQL поиске (традиционным). Link to comment Share on other sites More sharing options...
Mac Posted September 4, 2014 Author Share Posted September 4, 2014 (edited) В админке у меня стоит View New Content: Use SQL Always - Yes. Немножко вводит в заблуждение то, что написано конкретно про View New Content, но, по всей видимости, касается и viewUserContent. Иначе как объяснить разницу в результатах поиска по юзеру. Limit "My Content" results to X days у меня пусто. Не хочу ограничивать. Вообще немного нелогично распределены эти настройки в ACP. Правильноее было бы отделить мух от котлет (настройки, касаемые sql-поиска и sphinx) и сделать блок универсальных настроек, касаемых обоих способов. Поставил max_matches = 20000, переиндексировал. Последние сообщения стали показываться "правильнее", но поиск все равно ограничен 1000 постов. Видимо, ограничения где-то в скриптах.В блогах по-прежнему пусто. P.S. Кстати, что-то не доходят на gmail.com уведомления об ответах. Edited September 4, 2014 by Mac Link to comment Share on other sites More sharing options...
siv1987 Posted September 4, 2014 Share Posted September 4, 2014 Можно объяснить тем, что в одном случае используется обычный метод поиска, в другом метод viewUserContent (хотя из ограничений там только search_ucontent_days). Лимиты у сфинкса есть в /admin/applications/forums/extensions/search/engines/sphinx.phpreturn array( 'count' => intval( $result['total_found'] ) > 1000 ? 1000 : $result['total_found'], 'resultSet' => $search_ids ); Для традиционного поиска в /admin/applications/forums/extensions/search/engines/sql.php Link to comment Share on other sites More sharing options...
Mac Posted September 4, 2014 Author Share Posted September 4, 2014 Изменил лимиты в коде. Появился баг: когда делаю поиск по нику юзера, ссылка перехода на последнюю страницу результатов кидает на первую страницу. Опытным путем обнаружил, что пагинация действительно доходит до 40 страницы, а при попытке попасть на 41-ю, кидает на первую. 1 Link to comment Share on other sites More sharing options...
Mac Posted September 5, 2014 Author Share Posted September 5, 2014 Залез в БД, в таблице ipb_core_sys_conf_settings изменил опцию search_hardlimit, добавив две доп. строчки:100=100 200=200 300=300 400=400 500=500 1000=1000 10000=10000 20000=20000В настройках выставил 20000. Также в настройках указал лимит в днях на 10 лет. Изменилась только надпись в результатах поиска:(Поиск ограничен от 07-Сентябрь 04)Но на 41 страницу по-прежнему не переходит. Про изменение лимитов в БД подглядел на другом форуме (да простят меня админы за ссылку). Странно, что там человеку это помогло (правда, он юзал обычный поиск). Link to comment Share on other sites More sharing options...
siv1987 Posted September 5, 2014 Share Posted September 5, 2014 search_hardlimit (Ограничить результаты поиска по темам и сообщениям) используется только для SQL поиска. /* Hard limit - not used in Sphinx but may need to revisit if we bust IN()s */ //IPSSearchRegistry::set('set.hardLimit', ( ipsRegistry::$settings['search_hardlimit'] ) ? ipsRegistry::$settings['search_hardlimit'] : 200 ); Трудно вслепую что-то подсказать, не зная даже где происходит этот редирект. Сфинксом к сожалению не пользуемся. Залез в БД, в таблице ipb_core_sys_conf_settings изменил опцию search_hardlimit, добавив две доп. строчки:Или SQL запросом: UPDATE core_sys_conf_settings SET conf_extra="100=100 200=200 300=300 400=400 500=500 1000=1000 2000=2000 3000=3000 4000=4000 5000=5000 10000=10000 15000=15000 20000=20000" WHERE conf_key='search_hardlimit' Link to comment Share on other sites More sharing options...
siv1987 Posted September 5, 2014 Share Posted September 5, 2014 А попробуйте отредактировать значение для $this->_maxmatches в ./sphinxapi.phpЛибо установить его из настроек поиска форума (search_hardlimit) в /admin/applications/forums/extensions/search/engines/sphinx.phpПосле parent::__construct( $registry ); Добавив $this->sphinxClient->SetLimits( 0, 1000, $this->settings['search_hardlimit'] ); 1 Link to comment Share on other sites More sharing options...
Mac Posted September 6, 2014 Author Share Posted September 6, 2014 (edited) Вроде я уже пытался менять это значение, но не помогало. Видимо, это надо было делать в связке с предложенными выше изменениями кода движка. Сейчас увеличил $this->_maxmatches в ./sphinxapi.php с 1000 до 20000 - наконец-то стало кидать на последнюю страницу. Правда, остальные результаты по-прежнему неадекватные: первыми идут два поста за сегодня, а следом за 29 августа. Т.е. посты за последнюю неделю куда-то пропали из хронологии, да и дальше идут результаты с большими пробелами. Вообще очень по-дурацки сделана даже сортировка результатов - можно отсортировать результаты только по дате последнего обновления, но не по дате создания. А сортировки по имени, просмотрам, ответам - нафига это вообще нужно? 10 лет занимаюсь форумами, и вот ни разу не возникало необходимости сортировки по этим полям. Вообще чем больше копаюсь в IPB, тем меньше понимаю, как эти ребята с их напрочь потерянной логикой вообще смотгли создать такой известный продукт. По уровню логичности тот же старый phpBB выше на голову. Добавлено позже Вроде догнал наконец эту больную логику. Дело в том, что при поиске по имени автора результаты сортируются по дате последнего обновления в той теме, где этот юзер написал. Это ж надо было догадаться до такого! Т.е. если у вас на форуме есть огромная регулярно обновляемая тема (например, какие-нибудь "Мысли вслух"), где искомый юзер хотя бы раз отписался, то этот его пост будет постоянно маячить наверху результатов поиска, даже если пост был написал много лет назад, как ты ни сортируй. А если этот человек написал там не один пост, то все эти посты забьют все первые строчки результатов поиска. Сортировка указана "По дате последнего обновления". Прикол в том, что если искать через профиль "Найти контент", то несмотря на тот же тип сортировки "По дате последнего обновления" результаты будут отсортированы по дате создания поста. ТП напрочь стоит на своем, дескать, все правильно, и так было задумано. Очень интересует вопрос, как можно нафиг выпилить из движка эту идиотскую функцию сортировки по дате последнего обновления, и добавить вместо него сортировку по дате создания? Кстати, вот еще прикол: У меня форум с 2007 года, и этот год здесь выбрать невозможно, зато из 2020 пожалуйста. Я, конечно, понимаю, что можно и вручную вписать, но нафига такой недоделанный datepicker было вообще добавлять. Edited September 6, 2014 by Mac Link to comment Share on other sites More sharing options...
siv1987 Posted September 6, 2014 Share Posted September 6, 2014 По уровню логичности тот же старый phpBB выше на голову.По своему уровню старый phpbb унылое гавно, потому что кроме одной функции там ничего другого нету. Говорить об "логичности" в данном случае довольно затруднительно в ввиду отсутствия равномерного с ИПБ функционала. Чем крупнее проект тем сложнее логика, ну и конечно, обязательно найдется кто-то у которого она не совпадает с его представлениями о логичности, это неизбежно. Вроде догнал наконец эту больную логику. Темы могут сортироватся либо по дате последнего сообщения в них, либо по дате искомого поста. Если сортировать по дате последнего сообщения темы, результат будет составлять из часто обновляемых тем. Если сортировать по дате поста, темы будут перемешены из-за разницы в дате между последним сообщением и опять будут кричать что находятся не все темы. Старая тема http://ipbskins.ru/forum/topic6990.html Link to comment Share on other sites More sharing options...
Mac Posted September 6, 2014 Author Share Posted September 6, 2014 либо по дате последнего сообщения в них, либо по дате искомого постаА это где? У меня только по дате последнего обновления (в теме, по всей видимости). Link to comment Share on other sites More sharing options...
Mac Posted September 8, 2014 Author Share Posted September 8, 2014 Наконец-то удалось решить проблему разницы в сортировке при поиске по постам юзера из профиля и из общей формы поиска. В файле /admin/applications/forums/extensions/search/engines/sphinx.php находим:/* Sorting */ switch( $sort_by ) { default: case 'date': $sortKey = 'last_post'; $sortKeyPost = 'post_date';и последние две строчки заменяем на$sortKeyPost = $sortKey = 'post_date';Теперь сортировка результатов поиска будет по дате создания поста, а не по дате последнего сообщения в теме, где этот пост находится. Осталась последняя проблема с поиском по блогам, который через Sphinx не работает вообще. Подскажите, где копать? Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now