Статья вводная, будет полезна новичкам, которые впервые хотят установить сфинкс, индексировать и искать контент, или тем, кто имеет небольшой опыт работы с 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
Результаты поиска на скрине:
Подключиться к 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
Комментарии 1