---
title: Sphinx
date: 2007-02-02T10:00
tags: [backend, go, mysql, php, tech]
---

Sphinx - полнотекстовый поисковик по Mysql и Postgre, отличающийся скоростью от своих конкурентов, представленный на РИТ-2007 Петром Зайцевым . Использовать его имеет смысл только на больших проектах, где объем данных вынуждает уже использовать выделенный сервер.[Sphinx](http://www.sphinxsearch.com/) - полнотекстовый поисковик по Mysql и Postgre, отличающийся скоростью от своих конкурентов, представленный на [РИТ-2007](ht

Обычный поиск как известно очень простой и очень медленный (условно 1.2 МБ/сек)

`SELECT * FROM my_table WHERE my_col LIKE '%word%'`

Второй вариант - [boolean search](http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html) не настолько гибкий, но побыстрей (41 МБ/сек). Конкурентов MnoGoSearch (140 МБ/сек) и Lucene, Sphinx обходит с 2200 МБ/сек.

Понятно что каждое решение имеет свою сложность, порой не линейную в зависимости от размера БД и очевидно что Sphinx аппаратно не в состоянии пробежать 2 ГБ данных в секунду, дело в том что сначала БД индексируется, а потом **searchd.exe** демон висит в памяти, кушая от 100 мб оперативки, и предоставляет результаты выборки по API, в PHP или [ruby](http://www.datanoise.com/articles/2007/3/23/acts_as_sphinx-plugin) .

1. Создание таблицы в базе данных по которой будет проводится поиск. В качестве тестовой предлагается test.documents вместе с данными и dump-файлом
2. Создание конфиг файла. Если конфиг файл вы меняете впервые то замените @CONFDIR@ на реальную папку.
3. Запуск индексатора.  
    `indexer.exe --all`
4. Запуск сервиса searchd.exe с портом 3312, который будет выдавать результаты поиска по индексу.
5. Собственно запрос через API. В качестве примера есть test.php.

## Related

- [Агрегирование выборки в MongoDB + PHP](/ru/blog/tech/backend/DB/agregirovanie-vyborki-v-mongodb-php/)
- [Crontab](/ru/blog/tech/server/vagrant/)
- [Мини-шпаргалка по Unix](/ru/blog/tech/server/mini-shpargalka-po-unix/)
