Sphinx - ограничение на поиск более 100 страниц [РЕШЕНО]
Здравствуйте, сегодня столкнуся с проблемой, на сайте более 70 тыс топиков, настроил Сфинкс, все работает, отдает результаты поиска, НО
когда ввожу запрос на который выводится более 4000 результатов, пробую перейти на последнюю страницу сайт отдает ошибку
Проблема любого запроса начинается с 101 страницы, на 100ой пагинация есть и результаты.
Уважаемые гуру сайта помогите решить проблему, по логам сфинкса все окей, работает как часы, но с это проблемой не понимаю что делать.
Если кто-то знает куда копать отзовитесь буду вам очень признателен.
С помощью умельца 1099511627776 проблема была решена.
Спасибо вам 1099511627776 огромнейшее!
когда ввожу запрос на который выводится более 4000 результатов, пробую перейти на последнюю страницу сайт отдает ошибку
Системная ошибка, повторите позже Вернуться назад, перейти на главную
Проблема любого запроса начинается с 101 страницы, на 100ой пагинация есть и результаты.
Уважаемые гуру сайта помогите решить проблему, по логам сфинкса все окей, работает как часы, но с это проблемой не понимаю что делать.
Если кто-то знает куда копать отзовитесь буду вам очень признателен.
С помощью умельца 1099511627776 проблема была решена.
Спасибо вам 1099511627776 огромнейшее!
37 комментариев
Мое мнение — неправильно вычисляется количество статей.
т.е. статей грубо 1000 но в индексе показывает 3000
Так что походу роблема в самом сфинксе
sphinxsearch.com/docs/manual-1.10.html#api-func-setlimits
sphinxsearch.com/docs/1.10/conf-max-matches.html
напиал сюда: sphinxsearch.com/forum/view.html?id=10798
чтобы я мог понять почему у меня это не работает. Что такое 50000?
github.com/livestreet/livestreet/blob/master/engine/lib/external/Sphinx/sphinxapi.php#L387
В крайнем случае
www.php.net/manual/ru/sphinxclient.setlimits.php
небольшой print_r($data) после github.com/livestreet/livestreet/blob/master/classes/modules/sphinx/Sphinx.class.php#L88 вот этого if-а и посмотреть какая конкретно ошибка вылазит
Надо вписать другое дефолтное значение и можно смело его ставить в /classes/modules/sphinx/Sphinx.class.php
Но вообще, в идеале все равно надо sphinxapi править и задавать этой переменной динамическое значение в зависимости от кол-ва топиков и комментов.
Такие изменения могут добавит вам тонны проблем в будущем, например при обновлении версии LS.
Одно дело, если нет другого выбора, но похоже он есть.
Не утверждаю, что я прав, но я потестю
Плюс мне не ясно что это за поиск, который больше 10000 топиков не рекомендует выдавать в результатах… Здесь явно что-то не так…
Эта опция прямо влияет на то сколько памяти будет выделятся под буфер каждого запроса к поиску. ( Recklessly raising max_matches to 1,000,000 means that searchd will have to allocate and initialize 1-million-entry matches buffer for every query. )
При росте трафика вы получаете линейный и быстрый рост расхода памяти. Поставьте это параметр большим и при сколь-нибудь заметном трафике на поиск, ваш Sphinx быстро сожрёт всё доступную ему память, и я не знаю что будет потом. В лучшем случае — резкое падение производительности.
Потому разработчики честно вас и предупреждают, что в эти игры лучше не играть.
Ограничение в духе «в результатах поиска показывать только первые X релевантных документов» имеют огромный смысл. Снятие этих ограничений под сколь-нибудь заметной нагрузкой повалит любой сервер.
Вы должны чётко понимать, что именно вы делаете.
Дальше ничего менять не надо — это первичная инициализация объекта и атрибут _maxmatches переписывается при вызове метода SetLimits.
Собственно, об этом я и говорю, что механизм поиска в LS надо переделать немного.
И все, больше ничего.
Возможно єто уже вопро к ort -у
1099511627776
просто можно сказать спасли в прямом смысле мой проект, огромная благодарность и плюсиков я понаставил везде!
Чудо просто!
Слов у меня не хватит чтоб описать мою благодарность!
Поклон.
не работает ни хрена.
Внес такое изменение в строку 72 файла classes/modules/sphinx/Sphinx.class.php
На всякий случай перезапустил apache и nginx. Затем даю команды на полную переиндексацию.
# searchd --stop
# indexer --all
# searchd
Все отрабатывает… в итоге на то слово, где раньше он находил 5293 топика после повторной переиндексации выдает — Удивительно, но поиск не дал результатов. Чуть позже оказалось, что ничего не находит именно после перезапуска apache и nginx. Что делать люди?
В sphinx.conf прописал max_matches=100000, теперь все работает и ошибка 101-й страницы тоже исчезла, нажимаю на последнюю и отлично переходит на 530-ю последнюю страницу в найденном. Спасибо за наводку.
в пагинации в движке условие выставить: если страниц > чем нужно, то не показывать их.
Memory
memory limit: 4096M
memory usage: 16.071 M
peak usage: 30.750 M