User Tools

Site Tools


Writing /home/user/smartcj.com/wiki/data/cache/5/5e535036771d5bdb55c48e4269aa842d.i failed
Unable to save cache file. Hint: disk full; file permissions; safe_mode setting.
Writing /home/user/smartcj.com/wiki/data/cache/5/5e535036771d5bdb55c48e4269aa842d.metadata failed
ru:new_rotation_sphinx
Translations of this page:



Writing /home/user/smartcj.com/wiki/data/cache/6/6df7d2acacf2594e4cabc673360bd257.i failed
Unable to save cache file. Hint: disk full; file permissions; safe_mode setting.
Writing /home/user/smartcj.com/wiki/data/cache/6/6df7d2acacf2594e4cabc673360bd257.xhtml failed

This is an old revision of the document!


Sphinx for Rotation\Tube sites

Когда ваша база разрастается до приличного размера, скажем больше 50 000 галер, скорость поиска стандартным средствами mysql заметно падает.

Sphinx это система быстрого поиска с учетом морфологии. Более того, имеет смысл внедрять ее и до достижения вашей базой приличного размера из-за преищуществ морфологического поиска.

Установка:

  • Попросить админа поставить сам sphinx
  • создать каталог scj/sphinx
  • Добавить индекс смарта в конфиг sphinx (так же обычно делает админ). Пример конфига:
source scj
{
	type					= mysql

	sql_host				= localhost
	sql_user				= scj_mysql_login
	sql_pass				= scj_mysql_password
	sql_db					= scj_db
	sql_port				= 3306	# optional, default is 3306

// ====== version 48

	sql_query				= SELECT id, date, tags, alt, description, duration, sponsor_id, rgroup FROM rot_galleries as g \
							  JOIN rot_gallery_stats AS gs ON g.id = gs.thumb_id WHERE status = 1 and gs.best_thumb = 'yes' and rgroup != 0

	sql_attr_timestamp		= date
	sql_attr_uint		    = duration
	sql_attr_uint		    = sponsor_id
	sql_attr_uint		    = rgroup



//   =================  version 49
	sql_query				= SELECT id, UNIX_TIMESTAMP(activation_date) as date, tags, alt, description, duration, sponsor_id, rgroup FROM rot_galleries as g \
							  JOIN rot_gallery_stats AS gs ON g.id = gs.thumb_id JOIN rot_gallery_data AS gd ON gd.gallery_md5 = g.gallery_md5 WHERE status = 1 and gs.best_thumb = 'yes' and rgroup != 0

	sql_attr_timestamp		= date
	sql_attr_uint		    = duration
	sql_attr_uint		    = sponsor_id
	sql_attr_uint		    = rgroup

//   =================  version 50


sql_query				= SELECT id, crc32(g.gallery_md5) as gallery_md5_crc, UNIX_TIMESTAMP(activation_date) as date, tags, alt, description, duration, sponsor_id, rgroup, content_type, gs.total_ctr FROM rot_galleries as g \
							  JOIN rot_gallery_stats AS gs ON g.id = gs.thumb_id \
							  JOIN rot_gallery_info AS gi ON g.gallery_md5 = gi.gallery_md5 \
							  JOIN rot_gallery_data AS gd ON g.gallery_md5 = gd.gallery_md5 \
							  WHERE status = 1 and gs.best_thumb = 'yes' and rgroup != 0

	sql_attr_timestamp		= date
	sql_attr_uint		    = duration
	sql_attr_uint		    = sponsor_id
	sql_attr_uint		    = rgroup
	sql_attr_float		    = total_ctr
	sql_attr_uint		    = content_type
	sql_attr_uint			= gallery_md5_crc




	sql_query_info			        = SELECT * FROM rot_galleries WHERE id=$id
}


index scj_index
{
	source					= scj
	path					= /path_to_data/scj/sphinx/scj_index
	docinfo					= extern
	morphology                              = stem_en # or stem_ru for example
}

Тут надо заменить:

scj_mysql_login
scj_mysql_password
scj_db
path_to_data
  • Запустить индексирование базы (так же делает админ)
     indexer --all --rotate 
  • вам остается только прописать в настройки в сетингах ротации. Настройки можно узнать у админа.

Все.

NOTE Небольшое отступление про Sphinx. Его можно представить как урезанную версию вашей mysql базы. В mysql базе содержится информация условно id - дата добавления - описания - тумбы и тд.

Sphinx условно делает “выжимку” из базы в виде id - кейворды. Поиск по такой базе намного быстрее (к тому же сама структура Sphinx оптимизированна именно для поиска)

Алгоритм работы примерно такой: скрипт делает запрос в Sphinx, тот возвращает только ИД, и скрипт едлает выборку этих ИД из mysql базы. Из этого следует то, что если меняется mysql база, то надо менять и sphinx базу.

Для этого надо периодически запускать индексирование базы:

indexer --all --rotate

Sphinx for child (slave) sites

По дефолту слейв подхватывает данные сфинкса из базы мастера. те прописав сфинкс на мастере - все слейвы начинают так же юзать сфинкс.

Тут у вас может получиться следующий момент: по дефолту все пишут хост для сфинкса - localhost. Если слейв выносится на другой сервак - то логично что локалхост для него не работает в этом случае. Опять же логично что для этого случая надо прописать не локалхост, а конкретный ИП сервака где находится сфинк. И сразу проверить что коннекты разрешены на этот порт на этом серваке с того сервака, где стоит слейв.

Sphinx Search CTR

Если вы используете поиск сфинкс то по дефолту он ищет по релевантности (domain/?search=…

Можно так же сортировать результаты поиска по дате (domain/?search=…&order=date) и продолжительности (domain/?search=…&order=duration).

В 50 добавился еще вариант сортировки результатов по ctr (domain/?search=…&order=ctr)

Sphinx settings

Sphinx обладает большими возможностями по настройке индексирования и поиска. Например, хорошей идее добавить в конфиг эти необязательные строки.

min_word_len = 3 # Минимальная длина индексируемого слова min_infix_len = 2 # Минимальная длина инфикса (префикс в том числе) enable_star = 1 # Использовать оператор усечения “*”

Но конечно лучше всего пройтись по документации sphinx и выбрать параметры для себя.

ru/new_rotation_sphinx.1391019561.txt.gz · Last modified: (external edit)