Настройки SphinxSearch 2.0.4 поставленного в Ubuntu 12.04 командой apt-get

Я ставил Sphinx на Ubuntu 12.04. Использую облачный сервер Selectel, поэтому все операции выполнялись под root.
  1. В Ubuntu SphinxSearch 2.0.4 ставится простой командой
    apt-get install sphinxsearch

  2. Правим файл /etc/default/sphinxsearch и ставим START=yes
  3. Создаем файл /etc/sphinxsearch/sphinx.conf
    Я изначально взял отсюда: Sphinx. Установка и первичная настройка, и поправил пути, а также заменил deprecated address на listen.

    Также оказалось что таблица topic_comment теперь называется comment, поправил это тоже.
    ## Конфигурационный файл Sphinx-а для индексации Живой улицы
    
    #######################
    #
    # Описываем индексы
    #
    #######################
    
    # Источник-родитель для всех остальных источников. Здесь указываются параметры доступа 
    # к базе данных сайта
    source lsParentSource
    {
    	type		= mysql
    	sql_host	= localhost
    	sql_user	= root
    	sql_pass	= 
    	sql_db		= livestreet
    	sql_port	= 3306
        	# Для ускорения работы прописываем путь до MySQL-го UNIX-сокета (чтобы 
    	# операции с БД происходили не через TCP/IP стек сервера)
        	sql_sock	= /var/run/mysqld/mysqld.sock
        
        	
    	mysql_connect_flags	= 32 # 32- включение сжатие при обмене данными с БД
        
    	# Включам нужную кодировку соединения и выключаем кеш запросов
    	sql_query_pre			= SET NAMES utf8
        	sql_query_pre			= SET SESSION query_cache_type=OFF    
    }
    
    # Источник топиков
    source topicsSource : lsParentSource
    {
    	# запрос на получения данных топиков
    	sql_query		= \
    		SELECT t_fast.topic_id, t_fast.topic_title, UNIX_TIMESTAMP(t_fast.topic_date_add) as topic_date_add, \
    		tc.topic_text, t_fast.topic_publish \
    		FROM prefix_topic as t_fast, prefix_topic_content AS tc \
    		WHERE t_fast.topic_id=tc.topic_id AND t_fast.topic_id>=$start AND t_fast.topic_id<=$end
    
    	# запрос для дробления получения топиков на неколько итераций
    	sql_query_range		= SELECT MIN(topic_id),MAX(topic_id) FROM prefix_topic
    	
    	# сколько получать объектов за итерацию
    	sql_range_step		= 1000
    
    	
    	# Указываем булевый атрибут критерия "топик опубликован". Для возможности указания этого критерия при поиске
    	sql_attr_bool		= topic_publish
    
    	# Атрибут даты добавления, типа "время"
    	sql_attr_timestamp	= topic_date_add
    
    	# мульти-аттрибут "теги топика"
    	sql_attr_multi	= uint tag from query; SELECT topic_id, topic_tag_id FROM prefix_topic_tag
    
    	sql_ranged_throttle	= 0
    }
    
    # Источник комментариев
    source commentsSource : lsParentSource
    {
    	sql_query		= \
    			SELECT comment_id, comment_text, UNIX_TIMESTAMP(comment_date) as comment_date, comment_delete \
    			FROM prefix_comment \
    			WHERE comment_id>=$start AND comment_id<=$end
    
    	sql_query_range		= SELECT MIN(comment_id),MAX(comment_id) FROM prefix_comment
    	sql_range_step		= 5000
    
    	sql_attr_bool		= comment_delete
    	sql_attr_timestamp	= comment_date
    }
    
    #######################
    #
    # Описываем индексы
    #
    #######################
    
    index topicsIndex
    {
    	# Источник, который будет хранить данный индекса
    	source			= topicsSource
    	path			= /var/lib/sphinxsearch/data/lstopics
    
    	# Тип хранения аттрибутов
    	docinfo			= extern
    
    	mlock			= 0
    
    	# Используемые морфологические движки
    	morphology		= stem_enru, soundex, metaphone
    
    	# Кодировака данных из источника	
    	charset_type		= utf-8
    
    
    	# Из данных источника HTML-код нужно вырезать
    	html_strip				= 1
    }
    
    # Индекс комментариев
    index commentsIndex
    {
    	source			= commentsSource
    	path			= /var/lib/sphinxsearch/data/lscomments
    
    	docinfo			= extern
    
    	mlock			= 0
    
    	morphology		= stem_enru, soundex, metaphone
    
    	charset_type		= utf-8
    }
    
    #######################
    #
    # Настройки индексатора
    #
    #######################
    
    
    indexer
    {
    	# Лимит памяти, который может использавать демон-индексатор
    	mem_limit			= 32M
    }
    
    #######################
    #
    # Настройка демона-поисковика
    #
    #######################
    
    searchd
    {
            # Адрес, на котором будет прослушиваться порт
            listen                  = 127.0.0.1:3312
    
    	# Лог-файл демона
    	log					= /var/log/sphinxsearch/searchd.log
    
    	# Лог поисковых запросов. Если закомментировать,то логировать поисковые строки не будет
    	query_log			= /var/log/sphinxsearch/query.log
    
    	# Время в секундах, которое ждет демон при обмене данными с клиентом. По исчерпании происходит разрыв коннекта
    	read_timeout		= 5
    
    	# Максимальное количество одновременно-обрабатываемых запросов. 0 означает дофига, а точнее без ограничения
    	max_children		= 30
    
    	# Файл, в который сохраняется PID-процесса при запуске
    	pid_file			= /var/run/sphinxsearch/searchd.pid
    }

  4. Правим настройки для соединения с базой
    source lsParentSource
    {
            type            = mysql
            sql_host        = localhost
            sql_user        = root
            sql_pass        =
            sql_db          = livestreet
            sql_port        = 3306
    

  5. Правим префикс таблиц. В моем случае я заменил все вхождения prefix_ на пустоту. (6 замен)
  6. Индексацию будем делать под пользователем sphinxsearch, для этого надо ему выставить /bin/sh в виде шелла
    chsh -s /bin/sh sphinxsearch

  7. Запускаем индексацию из-под юзера sphinxsearch
    su sphinxsearch -c 'indexer --all'

    Индерксатор не должен выдавать ошибок, и должны появиться файлы индексов в папке /var/lib/sphinxsearch/data/
  8. Запускаем искалку
    service sphinxsearch start

  9. Проверяем, что поиск работает. У меня заработал.
  10. Ставим переиндексацию на крон. Для этого редактируем кронтаб для пользователя sphinxsearch
    su sphinxsearch -c 'crontab -e'

    Выбираем редактор и вводим такие таски
    12 */3 * * *  indexer --rotate topicsIndex > /dev/null 2>&1
    */50 * * * *  indexer --rotate commentsIndex > /dev/null 2>&1

В последнее время стало очень просто купить женское нижнее белье в интернет магазине. Не выходя из дома — это очень удобно!

10 комментариев

avatar
Я уже писал много раз об этом. Суть в том, что гораздо проще и правильней ставить Sphinx не из репозитория, а просто взяв wget-ом последнюю версию в нужной упаковке с сайта разработчиков. Тогда править в ихних конфигах вообще ничего не надо, да и версия будет свежее.

Но почему-то не находится мой топ через поиск по Sphinx на первых страницах (http://livestreet.ru/blog/dev_documentation/13482.html). А жаль. Я скромно считаю, что на данный момент он лучший по теме :)
avatar
ага к примеру вот так
avatar
Спасибо, действительно полезный топик. Ставьте на него правильные ссылки вот так Установка Sphinx для LiveStreet под Debian и Ubuntu и может хоть в поисковиках поднимется выше.

Касательно пакетов — у меня принцип — ставить апт-гетом дефолтные версии и не забивать голову. Регулярно приходится настраивать впс-ки под разные нужды, и есть желание тратить минимум времени на это.
avatar
В большинстве случаев я с вами соглашусь, но не во всех. sphinx — один и таковых. Во-первых, потому, что в стандартном репозитории Debian его, собственно, нет. И подозреваю не только у Debian так. Во-вторых потому что через wget тупо проще. IMHO :)
avatar
Как нет? Есть! Просто пакет называется не sphinx, a sphinxsearch. Вот он: Sphinx в Debian
avatar
OK. Видимо ошибся :)
avatar
там версия всегда древнее
avatar
Это точно! Версия древнее, как и у большинства других пакетов. Любители свежака сидят на Gentoo. Сам любил пособирать что-нибудь и сорцов, только было это лет 10 назад, а теперь как-то надоело.
avatar
Как нет? Есть! Просто пакет называется не sphinx, a sphinxsearch. Вот он: Sphinx в Debian
Кстати вы не совсем правы. в абсолютно стабильно разделе репозитория «squeeze» он там совершенно древней версии. 2.0.4 есть есть в «squeeze-backports» что не то же самое…
avatar
И это верно. Но мой топик был про Ubuntu 12.04 — это LTS релиз с поддержкой 5 лет. Там 2.0.4 стандартно в репе.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.