Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
Mac

Sphinx находит не все посты и записи блогов (3.4.6)

Рекомендованные сообщения

Настроил по примеру sphinx.conf, который генерируется через ACP. Заменил лишь параметр с кодировкой sbcs на utf-8. Поиск вроде ищет, но, например, если зайти в общую форму поиска и сделать поиск по автору, а вывод в виде сообщений, то выводятся не все сообщения. Разницу можно наблюдать, если зайти к этому же автору в профиль и кликнуть по "Найти весь контент". Кроме того, не ищет записей в блогах, комментарии.

 

Техподдержка IPB умыла руки, дескать, Sphinx стороннее ПО и не входит в техподдержку. Непонятно, зачем тогда было официально заявлять поддержку сфинкса и включать его в стандартный функционал.

 

БД в utf8_general_ci, таблицы в InnoDB. База 2.5 Gb.

 

Просьба ко всем, кто пользуется поиском Sphinx, проверить данные симптомы у себя. Я сам проверил на паре форумов - ошибка присутствует, но владельцы, видимо, не в курсе. Хочется выяснить, проблема конкретно у меня, или это глобальный косяк скриптов IPB.

Поделиться сообщением


Ссылка на сообщение

Нужно конфиги формирования индекса сфинкса смотреть и запросы к апи сфинкса, которые выдергивают айдишки найденных постов из индекса. И да, если у вас критерию поиска соотвествует 2000 постов, а у сфинкса указан лимит выдачи 1000, то он выдаст всего 1000.

Поделиться сообщением


Ссылка на сообщение

Не все это сколько? Какие сообщения не находятся? Скорее всего да, стоит ограничение как и в стандартном поиске.

Поделиться сообщением


Ссылка на сообщение

Конфиг совершенно стандартный - тот, что генерируется в админке:

 

 

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

## 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.

Поделиться сообщением


Ссылка на сообщение

И sphinx и SQL поиск имеют методы viewNewContent и viewUserContent. И если выбран сфинкс как поисковой движок, искать должен сфинкс. Не ищет он в новых публикациях если в настройках поиска выбрано "Новые публикации должны использовать только SQL".

viewUserContent еще использует настройку - Ограничить "Темы/Сообщения этого пользователя" результатами за X дней (search_ucontent_days). Хотя она находится в группе сфинкса, используется она также и при SQL поиске (традиционным).

Поделиться сообщением


Ссылка на сообщение
09/04/14 11:49 (изменено)

В админке у меня стоит 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 уведомления об ответах.

Изменено пользователем Mac

Поделиться сообщением


Ссылка на сообщение

Можно объяснить тем, что в одном случае используется обычный метод поиска, в другом метод viewUserContent (хотя из ограничений там только search_ucontent_days).

 

Лимиты у сфинкса есть в /admin/applications/forums/extensions/search/engines/sphinx.php

return array( 'count' => intval( $result['total_found'] ) > 1000 ? 1000 : $result['total_found'], 'resultSet' => $search_ids );

 

Для традиционного поиска в /admin/applications/forums/extensions/search/engines/sql.php

Поделиться сообщением


Ссылка на сообщение

Изменил лимиты в коде. Появился баг: когда делаю поиск по нику юзера, ссылка перехода на последнюю страницу результатов кидает на первую страницу.

 

Опытным путем обнаружил, что пагинация действительно доходит до 40 страницы, а при попытке попасть на 41-ю, кидает на первую.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

Залез в БД, в таблице 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 страницу по-прежнему не переходит.

 

Про изменение лимитов в БД подглядел на другом форуме (да простят меня админы за ссылку). Странно, что там человеку это помогло (правда, он юзал обычный поиск).

Поделиться сообщением


Ссылка на сообщение

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'

Поделиться сообщением


Ссылка на сообщение

А попробуйте отредактировать значение для $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'] );

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
09/06/14 02:51 (изменено)

Вроде я уже пытался менять это значение, но не помогало. Видимо, это надо было делать в связке с предложенными выше изменениями кода движка. Сейчас увеличил $this->_maxmatches в ./sphinxapi.php с 1000 до 20000 - наконец-то стало кидать на последнюю страницу. Правда, остальные результаты по-прежнему неадекватные: первыми идут два поста за сегодня, а следом за 29 августа. Т.е. посты за последнюю неделю куда-то пропали из хронологии, да и дальше идут результаты с большими пробелами.

 

Вообще очень по-дурацки сделана даже сортировка результатов - можно отсортировать результаты только по дате последнего обновления, но не по дате создания. А сортировки по имени, просмотрам, ответам - нафига это вообще нужно? 10 лет занимаюсь форумами, и вот ни разу не возникало необходимости сортировки по этим полям. Вообще чем больше копаюсь в IPB, тем меньше понимаю, как эти ребята с их напрочь потерянной логикой вообще смотгли создать такой известный продукт. По уровню логичности тот же старый phpBB выше на голову.

 

Добавлено позже

 

Вроде догнал наконец эту больную логику. Дело в том, что при поиске по имени автора результаты сортируются по дате последнего обновления в той теме, где этот юзер написал. Это ж надо было догадаться до такого! Т.е. если у вас на форуме есть огромная регулярно обновляемая тема (например, какие-нибудь "Мысли вслух"), где искомый юзер хотя бы раз отписался, то этот его пост будет постоянно маячить наверху результатов поиска, даже если пост был написал много лет назад, как ты ни сортируй. А если этот человек написал там не один пост, то все эти посты забьют все первые строчки результатов поиска. Сортировка указана "По дате последнего обновления".

 

Прикол в том, что если искать через профиль "Найти контент", то несмотря на тот же тип сортировки "По дате последнего обновления" результаты будут отсортированы по дате создания поста. ТП напрочь стоит на своем, дескать, все правильно, и так было задумано.

 

Очень интересует вопрос, как можно нафиг выпилить из движка эту идиотскую функцию сортировки по дате последнего обновления, и добавить вместо него сортировку по дате создания?

 

Кстати, вот еще прикол:

 

h_1409971921_2397524_5fc034c292.png

 

У меня форум с 2007 года, и этот год здесь выбрать невозможно, зато из 2020 пожалуйста. Я, конечно, понимаю, что можно и вручную вписать, но нафига такой недоделанный datepicker было вообще добавлять.

Изменено пользователем Mac

Поделиться сообщением


Ссылка на сообщение
По уровню логичности тот же старый phpBB выше на голову.

По своему уровню старый phpbb унылое гавно, потому что кроме одной функции там ничего другого нету. Говорить об "логичности" в данном случае довольно затруднительно в ввиду отсутствия равномерного с ИПБ функционала. Чем крупнее проект тем сложнее логика, ну и конечно, обязательно найдется кто-то у которого она не совпадает с его представлениями о логичности, это неизбежно.

 

Вроде догнал наконец эту больную логику.

Темы могут сортироватся либо по дате последнего сообщения в них, либо по дате искомого поста. Если сортировать по дате последнего сообщения темы, результат будет составлять из часто обновляемых тем. Если сортировать по дате поста, темы будут перемешены из-за разницы в дате между последним сообщением и опять будут кричать что находятся не все темы. Старая тема http://ipbskins.ru/forum/topic6990.html

Поделиться сообщением


Ссылка на сообщение
либо по дате последнего сообщения в них, либо по дате искомого поста
А это где? У меня только по дате последнего обновления (в теме, по всей видимости).

 

post-56753-0-99663400-1409990134_thumb.png

Поделиться сообщением


Ссылка на сообщение

Наконец-то удалось решить проблему разницы в сортировке при поиске по постам юзера из профиля и из общей формы поиска. В файле /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 не работает вообще. Подскажите, где копать?

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...