Перейти к контенту

Поиск в ipb3 по именам загруженных файлов


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

Подскажите, как поправить sphinx.conf чтобы в ipb3 сделать поиск по именам загруженных

пользователями файлов.

 

закомментированный конфиг

############################ --- DOWNLOADS --- ##############################

дает ошибки, и на вид структура вообще не та.

ругается на 

 

REPLACE( pi.perm_view, '*', 0 ) as perm_view, \

 

 

 


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

## data source definition

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

 

source ipb_source_config

{

#setup

type = mysql

sql_host = localhost

sql_user = .....

sql_pass = ......

sql_db = .......

sql_port = 3306

}

 

 

############################### --- TAGS --- ################################

 

source core_tags_search_main : ipb_source_config

{

# Set our forum PID counter

sql_query_pre = SET NAMES utf8

sql_query_pre = REPLACE INTO cache_store VALUES( 'sphinx_core_tags_counter', (SELECT max(tag_id) FROM core_tags), 0, UNIX_TIMESTAMP(), 0 )

 

# Query posts for the main source

sql_query = SELECT t.tag_id, t.tag_id as search_id, t.tag_added, t.tag_member_id, t.tag_meta_id, t.tag_meta_parent_id, t.tag_text, t.tag_meta_app, REPLACE( t.tag_meta_area, '-', '_' ) as tag_meta_area, \

CONCAT( ',', p.tag_perm_text, ',') as tag_perm_text ,p.tag_perm_visible \

FROM core_tags t \

LEFT JOIN core_tags_perms p ON ( t.tag_aai_lookup=p.tag_perm_aai_lookup )

 

# Fields

sql_attr_uint = search_id

sql_attr_timestamp = tag_added

sql_attr_uint = tag_member_id

sql_attr_uint = tag_meta_id

sql_attr_uint = tag_meta_parent_id

sql_attr_uint = tag_perm_visible

sql_ranged_throttle = 0

}

 

source core_tags_search_delta : core_tags_search_main

{

# Override the base sql_query_pre

sql_query_pre = SET NAMES utf8

sql_query_pre =

 

# Query posts for the main source

sql_query = SELECT t.tag_id, t.tag_id as search_id, t.tag_added, t.tag_member_id, t.tag_meta_id, t.tag_meta_parent_id, t.tag_text, t.tag_meta_app, REPLACE( t.tag_meta_area, '-', '_' ) as tag_meta_area, \

CONCAT( ',', p.tag_perm_text, ',') as tag_perm_text ,p.tag_perm_visible \

FROM core_tags t \

LEFT JOIN core_tags_perms p ON ( t.tag_aai_lookup=p.tag_perm_aai_lookup ) \

WHERE t.tag_id > ( SELECT cs_value FROM cache_store WHERE cs_key='sphinx_core_tags_counter' )

}

 

index core_tags_search_main

{

source = core_tags_search_main

path = /var/sphinx/core_tags_search_main

 

docinfo = extern

mlock = 0

morphology = lemmatize_ru_all, lemmatize_en_all

min_word_len = 1

charset_type = utf-8

charset_table = 0..9, A..Z->a..z, _, -, @, *, U+002E, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F

html_strip = 0

infix_fields = tag_text

min_infix_len = 3

enable_star = 1

}

 

index core_tags_search_delta : core_tags_search_main

{

source = core_tags_search_delta

path = /var/sphinx/core_tags_search_delta

}

 

################################# --- FORUM --- ##############################

source forums_search_posts_main : ipb_source_config

{

# Set our forum PID counter

sql_query_pre = SET NAMES utf8

sql_query_pre = REPLACE INTO cache_store VALUES( 'sphinx_forums_counter_posts', (SELECT max(pid) FROM posts), 0, UNIX_TIMESTAMP(), 0 )

 

# Query posts for the main source

sql_query = SELECT p.pid, p.pid as search_id, p.author_id, p.post_date, REPLACE( p.post, '-', '&\#8208') as post, p.topic_id, p.queued, \

t.tid, LOWER(t.title) as tordinal, REPLACE( t.title, '-', '&\#8208') as title, t.views, t.posts, t.forum_id, t.last_post, t.state, t.start_date, t.starter_id, t.last_poster_id, t.topic_firstpost, \

CASE WHEN t.approved = -1 THEN 1 ELSE 0 END AS soft_deleted, \

CASE WHEN t.approved = -1 THEN 0 ELSE t.approved END AS approved, \

CASE WHEN t.topic_archive_status IN (0,3) THEN 0 ELSE 1 END AS archive_status, \

CONCAT( SUBSTRING( t.last_post, 2, 8 ), '0', LPAD( t.tid, 10, 0 ) ) as last_post_group \

FROM posts p \

LEFT JOIN topics t ON ( p.topic_id=t.tid )

 

# Fields

sql_attr_uint = queued

sql_attr_uint = approved

sql_attr_uint = soft_deleted

sql_attr_uint = archive_status

sql_attr_uint = search_id

sql_attr_uint = forum_id

sql_attr_timestamp = post_date

sql_attr_timestamp = last_post

sql_attr_timestamp = start_date

sql_attr_uint = author_id

sql_attr_uint = starter_id

sql_attr_uint = tid

sql_attr_uint = posts

sql_attr_uint = views

sql_attr_str2ordinal = tordinal

sql_attr_bigint = last_post_group

sql_attr_multi = uint tag_id from query; SELECT t.topic_firstpost, c.tag_id FROM core_tags c LEFT JOIN topics t ON (t.tid=c.tag_meta_id) WHERE c.tag_meta_app='forums' AND c.tag_meta_area='topics'

 

sql_ranged_throttle = 0

}

 

source forums_search_posts_delta : forums_search_posts_main

{

# Override the base sql_query_pre

sql_query_pre = SET NAMES utf8

sql_query_pre =

 

# Query posts for the delta source

sql_query = SELECT p.pid, p.pid as search_id, p.author_id, p.post_date, REPLACE( p.post, '-', '&\#8208') as post, p.topic_id, p.queued, \

t.tid, LOWER(t.title) as tordinal, REPLACE( t.title, '-', '&\#8208') as title, t.views, t.posts, t.forum_id, t.last_post, t.state, t.start_date, t.starter_id, t.last_poster_id, t.topic_firstpost, \

CASE WHEN t.approved = -1 THEN 1 ELSE 0 END AS soft_deleted, \

CASE WHEN t.approved = -1 THEN 0 ELSE t.approved END AS approved, \

CASE WHEN t.topic_archive_status IN (0,3) THEN 0 ELSE 1 END AS archive_status, \

CONCAT( SUBSTRING( t.last_post, 2, 8 ), '0', LPAD( t.tid, 10, 0 ) ) as last_post_group \

FROM posts p \

LEFT JOIN topics t ON ( p.topic_id=t.tid ) \

WHERE p.pid > ( SELECT cs_value FROM cache_store WHERE cs_key='sphinx_forums_counter_posts' )

 

sql_query_killlist = SELECT pid FROM posts WHERE pid > ( SELECT cs_value FROM cache_store WHERE cs_key='sphinx_forums_counter_posts' )

}

 

index forums_search_posts_main

{

source = forums_search_posts_main

path = /var/sphinx/forums_search_posts_main

 

docinfo = extern

mlock = 0

morphology = lemmatize_ru_all, lemmatize_en_all

min_word_len = 2

charset_type = utf-8

html_strip = 0

infix_fields = post, title

min_infix_len = 3

enable_star = 1

}

 

index forums_search_posts_delta : forums_search_posts_main

{

source = forums_search_posts_delta

path = /var/sphinx/forums_search_posts_delta

}

 

source forums_search_archive_main : ipb_source_config

{

# Set our forum PID counter

sql_query_pre = SET NAMES utf8

sql_query_pre = REPLACE INTO cache_store VALUES( 'sphinx_forums_counter_archives', (SELECT max(archive_id) FROM forums_archive_posts), 0, UNIX_TIMESTAMP(), 0 )

 

# Query posts for the main source

sql_query = SELECT p.archive_id, p.archive_id as search_id, p.archive_author_id as author_id, p.archive_content_date as post_date, REPLACE( p.archive_content, '-', '&\#8208') as archive_content, p.archive_topic_id, p.archive_queued as queued, \

t.tid, LOWER(t.title) as tordinal, REPLACE( t.title, '-', '&\#8208') as title, t.views, t.posts, t.forum_id, t.last_post, t.state, t.start_date, t.starter_id, t.last_poster_id, t.topic_firstpost, \

CASE WHEN t.approved = -1 THEN 1 ELSE 0 END AS soft_deleted, \

CASE WHEN t.approved = -1 THEN 0 ELSE t.approved END AS approved, \

CASE WHEN t.topic_archive_status IN (0,3) THEN 0 ELSE 1 END AS archive_status, \

CONCAT( SUBSTRING( t.last_post, 2, 8 ), '0', LPAD( t.tid, 10, 0 ) ) as last_post_group \

FROM forums_archive_posts p \

LEFT JOIN topics t ON ( p.archive_topic_id=t.tid )

 

# Fields

sql_attr_uint = queued

sql_attr_uint = approved

sql_attr_uint = soft_deleted

sql_attr_uint = archive_status

sql_attr_uint = search_id

sql_attr_uint = forum_id

sql_attr_timestamp = post_date

sql_attr_timestamp = last_post

sql_attr_timestamp = start_date

sql_attr_uint = author_id

sql_attr_uint = starter_id

sql_attr_uint = tid

sql_attr_uint = posts

sql_attr_uint = views

sql_attr_str2ordinal = tordinal

sql_attr_bigint = last_post_group

sql_attr_multi = uint tag_id from query; SELECT t.topic_firstpost, c.tag_id FROM core_tags c LEFT JOIN topics t ON (t.tid=c.tag_meta_id) WHERE c.tag_meta_app='forums' AND c.tag_meta_area='topics'

 

sql_ranged_throttle = 0

}

 

source forums_search_archive_delta : forums_search_archive_main

{

# Override the base sql_query_pre

sql_query_pre = SET NAMES utf8

sql_query_pre =

 

# Query posts for the delta source

sql_query = SELECT p.archive_id, p.archive_id as search_id, p.archive_author_id as author_id, p.archive_content_date as post_date, REPLACE( p.archive_content, '-', '&\#8208') as archive_content, p.archive_topic_id, p.archive_queued as queued, \

t.tid, LOWER(t.title) as tordinal, REPLACE( t.title, '-', '&\#8208') as title, t.views, t.posts, t.forum_id, t.last_post, t.state, t.start_date, t.starter_id, t.last_poster_id, t.topic_firstpost, \

CASE WHEN t.approved = -1 THEN 1 ELSE 0 END AS soft_deleted, \

CASE WHEN t.approved = -1 THEN 0 ELSE t.approved END AS approved, \

CASE WHEN t.topic_archive_status IN (0,3) THEN 0 ELSE 1 END AS archive_status, \

CONCAT( SUBSTRING( t.last_post, 2, 8 ), '0', LPAD( t.tid, 10, 0 ) ) as last_post_group \

FROM forums_archive_posts p \

LEFT JOIN topics t ON ( p.archive_topic_id=t.tid ) \

WHERE p.archive_id > ( SELECT cs_value FROM cache_store WHERE cs_key='sphinx_forums_counter_archives' )

 

sql_query_killlist = SELECT archive_id FROM forums_archive_posts WHERE archive_id > ( SELECT cs_value FROM cache_store WHERE cs_key='sphinx_forums_counter_archives' )

}

 

index forums_search_archive_main

{

source = forums_search_archive_main

path = /var/sphinx/forums_search_archive_main

 

docinfo = extern

mlock = 0

morphology = lemmatize_ru_all, lemmatize_en_all

min_word_len = 2

charset_type = utf-8

html_strip = 0

infix_fields = archive_content, title

min_infix_len = 3

enable_star = 1

}

 

index forums_search_archive_delta : forums_search_archive_main

{

source = forums_search_archive_delta

path = /var/sphinx/forums_search_archive_delta

}

############################ --- DOWNLOADS --- ##############################

 

#source downloads_search_main : ipb_source_config

#{

# # Set our forum PID counter

# sql_query_pre = REPLACE INTO ibf_cache_store VALUES( 'sphinx_downloads_counter', (SELECT max(file_id) FROM ibf_downloads_files), '', 0, UNIX_TIMESTAMP() )

#

# # Query posts for the main source

# sql_query = SELECT f.*, f.file_id as search_id, \

# REPLACE( pi.perm_view, '*', 0 ) as perm_view, \

# CASE WHEN pi.authorized_users IS NULL THEN 0 ELSE pi.authorized_users END AS authorized_users, \

# CASE WHEN pi.friend_only=0 THEN 0 ELSE f.file_submitter END AS friend_only, \

# CASE WHEN pi.owner_only=0 THEN 0 ELSE f.file_submitter END AS owner_only \

# FROM ibf_downloads_files f \

# LEFT JOIN ibf_permission_index pi ON ( pi.perm_type_id=f.file_cat AND pi.app='downloads' AND pi.perm_type='cat' ) \

# WHERE f.file_id <= ( SELECT cs_value FROM ibf_cache_store WHERE cs_key='sphinx_downloads_counter' )

#

# # Fields

# sql_attr_uint = search_id

# sql_attr_uint = friend_only

# sql_attr_uint = file_cat

# sql_attr_uint = owner_only

# sql_attr_timestamp = file_updated

# sql_attr_multi = uint perm_view from field

# sql_attr_multi = uint authorized_users from field

# sql_attr_uint = file_submitter

#

# sql_ranged_throttle = 0

#}

#

#source downloads_search_delta : downloads_search_main

#{

# # Override the base sql_query_pre

# sql_query_pre =

#

# # Query posts for the main source

# sql_query = SELECT f.*, f.file_id as search_id, \

# REPLACE( pi.perm_view, '*', 0 ) as perm_view, \

# CASE WHEN pi.authorized_users IS NULL THEN 0 ELSE pi.authorized_users END AS authorized_users, \

# CASE WHEN pi.friend_only=0 THEN 0 ELSE f.file_submitter END AS friend_only, \

# CASE WHEN pi.owner_only=0 THEN 0 ELSE f.file_submitter END AS owner_only \

# FROM ibf_downloads_files f \

# LEFT JOIN ibf_permission_index pi ON ( pi.perm_type_id=f.file_cat AND pi.app='downloads' AND pi.perm_type='cat' ) \

# WHERE f.file_id > ( SELECT cs_value FROM ibf_cache_store WHERE cs_key='sphinx_downloads_counter' )

#}

#

#index downloads_search_main

#{

# source = downloads_search_main

# path = /var/sphinx/downloads_search_main

#

# docinfo = extern

# mlock = 0

# morphology = stem_enru

# min_word_len = 2

# charset_type = sbcs

# html_strip = 0

#}

#

#index downloads_search_delta : downloads_search_main

#{

# source = downloads_search_delta

# path = /var/sphinx/downloads_search_delta

#}

 

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

## indexer settings

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

 

indexer

{

mem_limit = 256M

#lemmatizer_base = /var/sphinx/

}

 

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

## searchd settings

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

 

searchd

{

listen = 127.0.0.1

port = 9312

log = /var/sphinx/log/searchd.log

query_log = /var/sphinx/log/query.log

read_timeout = 5

max_children = 30

pid_file = /var/sphinx/log/searchd.pid

max_matches = 1000

seamless_rotate = 0

preopen_indexes = 0

unlink_old = 1

}

 

# --eof--


Изменено пользователем artmel
Ссылка на комментарий
Поделиться на других сайтах

У меня оба этих запроса выполняются на отлично. Выдают все доступные файлы.

 

 

REPLACE INTO cache_store VALUES( 'sphinx_downloads_counter', (SELECT max(file_id) FROM downloads_files), '', 0, UNIX_TIMESTAMP() );
SELECT f.*, f.file_id as search_id,
REPLACE( pi.perm_view, '*', 0 ) as perm_view,
CASE WHEN pi.authorized_users IS NULL THEN 0 ELSE pi.authorized_users END AS authorized_users, 
CASE WHEN pi.friend_only=0 THEN 0 ELSE f.file_submitter END AS friend_only, 
CASE WHEN pi.owner_only=0 THEN 0 ELSE f.file_submitter END AS owner_only 
FROM downloads_files f 
LEFT JOIN permission_index pi ON ( pi.perm_type_id=f.file_cat AND pi.app='downloads' AND pi.perm_type='cat' ) 
WHERE f.file_id <= ( SELECT cs_value FROM cache_store WHERE cs_key='sphinx_downloads_counter' );

 



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

  • Лайк 1
Ссылка на комментарий
Поделиться на других сайтах

Спасибо за ответ!

Дело в том , что у меня  файлы храняться в таблице 

attachments  (ipb3.4.7)

а в этом запросе она нигде не описана. 

Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...

вот правильный запрос. 

Выдает текст поста название файла  и id поста и топика.

SELECT p.post, a.attach_file, a.attach_parent_id, a.attach_rel_id
FROM  attachments a
INNER JOIN  posts p ON ( p.pid = a.attach_rel_id ) 
WHERE a.attach_rel_module =  'post'
AND a.attach_file LIKE  '%BMW%'

Может кто помочь с составлением конфига на сфинкс.


и правильно выставить права доступа на найденое, или они не здесь выставляются?

Ссылка на комментарий
Поделиться на других сайтах

Я не понимаю, чем вам поможет индекс в сфинксе. Вам нужно сначала научить сам движок искать аттачи, для этого нужно написать расширение, а уже потом подключать ускорители. 

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.