Установка sphinx на linux. Индексация и поиск.

Статья вводная, будет полезна новичкам, которые впервые хотят установить сфинкс, индексировать и искать контент, или тем, кто имеет небольшой опыт работы с sphinx.

Что такое sphinx?

Сфинкc — это бесплатный полнотекстовый поисковый движок, написанный на C++. С быстрой индексацией документов, стоп-словами, умеет интегрироваться с самыми известными БД: Mysql, MsSql, Oracle и тд, также имеет АПИ с популярными языками программирования PHP, Perl, Java и т.д. И! Имеет поддержку SQL синтаксиса.

Установка sphinx

sudo apt-get install sphinxsearch

Конфигурационный файл sphinx лежит по пути:

/etc/sphinxsearch/sphinx.conf

Запуск и остановка демона sphinx

sudo searchd   #запуск демона, должен появится searchd.pid (у меня /var/run/sphinxsearch/searchd.pid)
sudo searchd --stop   #остановка sphinx демона

Чтобы настроить конфигурацию, мы будем править конфиг:

sudo vim /etc/sphinxsearch/sphinx.conf

Содержимое /etc/sphinxsearch/sphinx.conf:

 

source src1
{
	type			= mysql
	sql_host		= localhost
	sql_user		= test
	sql_pass		=
	sql_db			= test
	sql_port		= 3306	# optional, default is 3306
	sql_query		= \
		SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
		FROM documents
	sql_attr_uint		= group_id
	sql_attr_timestamp	= date_added
	sql_ranged_throttle	= 0
	sql_query_info		= SELECT * FROM documents WHERE id=$id
}

#############################################################################
## index definition
#############################################################################
index test1
{
	source			= src1
	path			= /var/lib/sphinxsearch/data/test1
	docinfo			= extern
	mlock			= 0
	morphology		= none
	min_word_len		= 1
	charset_type		= sbcs
}


#############################################################################
## indexer settings
#############################################################################
indexer
{
	mem_limit		= 32M
}

#############################################################################
## searchd settings
#############################################################################
searchd
{
	listen			= 9312
	log			= /var/log/sphinxsearch/searchd.log
	query_log		= /var/log/sphinxsearch/query.log
	read_timeout		= 5
	client_timeout		= 300
	max_children		= 30
	pid_file		= /var/run/sphinxsearch/searchd.pid
	max_matches		= 1000
	seamless_rotate		= 1
	preopen_indexes		= 1
	unlink_old		= 1
	mva_updates_pool	= 1M
	max_packet_size		= 8M
	max_filters		= 256
	max_filter_values	= 4096
	max_batch_queries	= 32
	workers			= threads # for RT to work
	compat_sphinxql_magics	= 0
}

Sphinx индексация

indexer --config /etc/sphinxsearch/sphinx.conf test1
indexer --config /etc/sphinxsearch/sphinx.conf --rotate --all

Производим поиск по sphinx

search -i test1 -q test

Результаты поиска на скрине:

Результат консольного поиска Сфинкс по индексу test1

Подключиться к sphinx из консоли

Подключиться к sphinx из консоли можно точно также, как и к mysql. Главное, указать порт и хост. Xост указывать обязательно, т.к. под юниксами без него не взлетит: libmysqlclient по умолчанию коннектится на UNIX-сокет, а не TCP-порт, поэтому просто -P недостаточно.

mysql -h 127.0.0.1 -P 9324

Порт тот же самый, который указан в вашем конфиге для sphinx (например, в моём конфиге sphinx.conf: строка listen = 9324:mysql41).

Заключение.

Работать со финкс достаточно просто. После добавления нового индекса делаем:

sudo indexer -c sphinx.conf wi_backend__sph_sites   # производим индексацию

или sudo indexer --rotate -c sphinx.conf wi_backend__sph_sites

Затем запускаем поискового демона, если он еще не запущен. Если же уще запущен, то система любезно об этом сообщит:

sudo searchd -c sphinx.conf

 
Поисковые запросы, по которым приходили пользователи
 
 
 

icon Комментарии 1

 Sedoi 3 года назад
А почему не написано, каким образом запустить индекс и сам сфинкс? Сказал раз, говори два.
Ваш комментарий к статье.. (для авторизованных)

ctrl+enter

icon Вход в систему

зарегистрироваться
НОВЫЕ ПОЛЬЗОВАТЕЛИ