Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Опубликовано:

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

 

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

 

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

 

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

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

Опубликовано:
  • Автор

Да вроде поддерживают:

################################# --- BLOG --- ##############################

source ipb_blog_search_main : ipb_ipb_source_config
{
   # Set our forum PID counter
   sql_query_pre   = REPLACE INTO ipb_cache_store VALUES( 'sphinx_blog_counter', (SELECT max(entry_id) FROM ipb_blog_entries), 0, UNIX_TIMESTAMP(), 0 )

   # Query posts for the main source
   sql_query       = SELECT e.entry_id, e.entry_id as search_id, e.entry_name, e.entry_name as tordinal, e.entry, e.entry_date, e.entry_author_id, e.entry_num_comments, e.blog_id, \
                            b.blog_owner_only, b.blog_private, b.blog_disabled, \
                           CASE WHEN e.entry_status='published' THEN 0 ELSE e.entry_author_id END AS entry_not_published, \
                           CASE WHEN b.blog_owner_only=0 THEN 0 ELSE b.member_id END AS blog_owner_id, \
                           CASE WHEN b.blog_authorized_users IS NULL THEN 0 ELSE 1 END AS authorized_users \
                       FROM ipb_blog_entries e \
                     LEFT JOIN ipb_blog_blogs b ON ( b.blog_id=e.blog_id )

   # Fields    
   sql_attr_uint           = search_id
   sql_attr_uint           = blog_owner_only
   sql_attr_timestamp      = entry_date
   sql_attr_string         = tordinal
   sql_attr_uint           = entry_author_id
   sql_attr_uint           = entry_num_comments
   sql_attr_uint           = blog_id
   sql_attr_uint           = blog_private
   sql_attr_uint           = blog_disabled
   sql_attr_uint           = entry_not_published
   sql_attr_uint           = blog_owner_id
   sql_attr_uint           = authorized_users
   sql_attr_multi          = uint tag_id from query; SELECT tag_meta_id, tag_id FROM ipb_core_tags WHERE tag_meta_app='blog' AND tag_meta_area='entries'
   sql_ranged_throttle = 0
}

source ipb_blog_search_delta : ipb_blog_search_main
{
   # Override the base sql_query_pre
   sql_query_pre = 

   # Query posts for the delta source
   sql_query       = SELECT e.entry_id, e.entry_id as search_id, e.entry_name, e.entry_name as tordinal, e.entry, e.entry_date, e.entry_author_id, e.entry_num_comments, e.blog_id, b.blog_owner_only, b.blog_private, b.blog_disabled, \
                           CASE WHEN e.entry_status='published' THEN 0 ELSE e.entry_author_id END AS entry_not_published, \
                           CASE WHEN b.blog_owner_only=0 THEN 0 ELSE b.member_id END as blog_owner_id, \
                           CASE WHEN b.blog_authorized_users IS NULL THEN 0 ELSE 1 END AS authorized_users \
                       FROM ipb_blog_entries e \
                     LEFT JOIN ipb_blog_blogs b ON ( b.blog_id=e.blog_id ) \
                     WHERE e.entry_id > ( SELECT cs_value FROM ipb_cache_store WHERE cs_key='sphinx_blog_counter' )    
}

index ipb_blog_search_main
{
   source          = ipb_blog_search_main
   path            = /var/lib/sphinx/mysite_ipb/ipb_blog_search_main

   docinfo         = extern
   mlock           = 0
   morphology      = none
   min_word_len    = 2
   charset_type    = utf-8
   html_strip      = 0
   #infix_fields    = entry_name, entry
   #min_infix_len   = 3
   #enable_star     = 1
}

index ipb_blog_search_delta : ipb_blog_search_main
{
  source           = ipb_blog_search_delta
  path             = /var/lib/sphinx/mysite_ipb/ipb_blog_search_delta
}

source ipb_blog_comments_main : ipb_ipb_source_config
{
   # Set our forum PID counter
   sql_query_pre   = REPLACE INTO ipb_cache_store VALUES( 'sphinx_blog_comments_counter', (SELECT max(comment_id) FROM ipb_blog_comments), 0, UNIX_TIMESTAMP(), 0 )

   # Query posts for the main source
   sql_query       = SELECT c.comment_id, c.comment_id as search_id, c.member_id as comment_member_id, c.comment_date, c.comment_approved, c.comment_text, \
                            e.entry_id, e.entry_name as tordinal, e.entry_date, e.entry_author_id, e.entry_num_comments, e.blog_id, \
                            b.blog_owner_only, b.blog_private, b.blog_disabled, \
                           CASE WHEN e.entry_status='published' THEN 0 ELSE e.entry_author_id END AS entry_not_published, \
                           CASE WHEN b.blog_owner_only=0 THEN 0 ELSE b.member_id END AS blog_owner_id, \
                           CASE WHEN b.blog_authorized_users IS NULL THEN 0 ELSE 1 END AS authorized_users, \
                           CONCAT(e.entry_last_comment_date, '.', e.entry_id ) as last_post_group \
                       FROM ipb_blog_comments c \
                     LEFT JOIN ipb_blog_entries e ON ( c.entry_id=e.entry_id ) \
                     LEFT JOIN ipb_blog_blogs b ON ( b.blog_id=e.blog_id )

   # Fields    
   sql_attr_uint           = search_id
   sql_attr_uint           = entry_id
   sql_attr_uint           = blog_owner_only
   sql_attr_timestamp      = entry_date
   sql_attr_string         = tordinal
   sql_attr_uint           = entry_author_id
   sql_attr_uint           = entry_num_comments
   sql_attr_uint           = blog_id
   sql_attr_uint           = blog_private
   sql_attr_uint           = blog_disabled
   sql_attr_uint           = entry_not_published
   sql_attr_uint           = blog_owner_id
   sql_attr_uint           = authorized_users
   sql_attr_uint           = last_post_group
   sql_attr_timestamp      = comment_date
   sql_attr_uint           = comment_member_id
   sql_attr_uint           = comment_approved
   sql_ranged_throttle = 0
}

source ipb_blog_comments_delta : ipb_blog_comments_main
{
   # Override the base sql_query_pre
   sql_query_pre = 

   # Query posts for the delta source
   sql_query       = SELECT c.comment_id, c.comment_id as search_id, c.member_id as comment_member_id, c.comment_date, c.comment_approved, c.comment_text, \
                            e.entry_id, e.entry_name as tordinal, e.entry_date, e.entry_author_id, e.entry_num_comments, e.blog_id, \
                            b.blog_owner_only, b.blog_private, b.blog_disabled, \
                           CASE WHEN e.entry_status='published' THEN 0 ELSE e.entry_author_id END AS entry_not_published, \
                           CASE WHEN b.blog_owner_only=0 THEN 0 ELSE b.member_id END AS blog_owner_id, \
                           CASE WHEN b.blog_authorized_users IS NULL THEN 0 ELSE 1 END AS authorized_users, \
                           CONCAT(e.entry_last_comment_date, '.', e.entry_id ) as last_post_group \
                       FROM ipb_blog_comments c \
                     LEFT JOIN ipb_blog_entries e ON ( c.entry_id=e.entry_id ) \
                     LEFT JOIN ipb_blog_blogs b ON ( b.blog_id=e.blog_id ) \
                     WHERE c.comment_id <= ( SELECT cs_value FROM ipb_cache_store WHERE cs_key='sphinx_blog_comments_counter' )    
}

index ipb_blog_comments_main
{
   source          = ipb_blog_comments_main
   path            = /var/lib/sphinx/mysite_ipb/ipb_blog_comments_main

   docinfo         = extern
   mlock           = 0
   morphology      = none
   min_word_len    = 2
   charset_type    = utf-8
   html_strip      = 0
   #infix_fields    = comment_text
   #min_infix_len   = 3
   #enable_star     = 1
}

index ipb_blog_comments_delta : ipb_blog_comments_main
{
  source           = ipb_blog_comments_delta
  path             = /var/lib/sphinx/mysite_ipb/ipb_blog_comments_delta
}

Опубликовано:

Тогда должен работать.

Опубликовано:
  • Автор

Как я и подозревал, это был баг. Добил ТП, исправили. Всем, у кого стоит сфинкс, советую внести этот багфикс.

 

А вам, siv1987, большое человеческое спасибо за участие! А то в других сообществах IPB просто глухая стена.

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

  • 3 недели спустя...
Опубликовано:

Поиск Сфинкс конечно отличный - ищет мгновенно.

 

Однако не решил проблему как у автора топика - максимальное кол-во страниц 40, как не меняй разные параметры в файлах :(

 

И ещё. Индексация всего контента раз в сутки (не нового, новый контент индексируеться каждые десять минут за микросекунды) занимает почти две минуты, и всё время это форум простаивает. Можно ли как то оптимизировать индексацию?

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

Сейчас на странице 0

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.