Загадки сфинкса: полнотекстовый поискSphinx — система полнотекстового поиска, разработанная Андреем Аксеновым и распространяемая по лицензии GNU GPL. Отличительной особенностью является высокая скорость индексации и поиска, а также интеграция с существующими СУБД (MySQL, PostgreSQL, ...) и API для распространённых языков программирования (официально поддерживаются PHP, Python, Java). Если вы используете Debian, тогда для установки Sphinx достаточно выполнить команду:
Конфигурационный файл называется:
Рассмотрим случай, когда у нас большая база данных (миллионы строк), в этом случае построение полного индекса может занять достаточно большой интервал времени, что может негативно сыграть на производительности системы в целом. Чтобы избежать эту проблему на практике вместе с полным индексом используются дельта индексы
В случае с дельта-индексом нам необходимо знать последний id-записи из полного-индекса, и начинать индексировать данные только с него. Для этого создадим еще одну таблицу в базе данных, чтобы хранить там id крайней записи из полного-индекса:
Добавим для нашего индекса запись, для дальнейшего обновления:
Отредактируем конфигурационный файл Sphinx (/etc/sphinxsearch/sphinx.conf) следующим образом: добавим источник для подключения к базе данных:
Источник данных для полного индекса добавим как потомка dbconnect:
Определим источник для дельта индекса:
Определим полный индекс:
Строка text=plain означает, что используются стандартные индексные файлы Sphinx. Другие варианты: distributed(если есть индексные файлы, распределенные по нескольким узлам сети) и rt(что означает реального времени). Эти индексы можно изменять динамически. Строка source=full_dataсвязывает источник данных full_data с индексом. На самом деле можно объединить несколько источников данных в один индекс, но в данном примере это не делается. Строка path= определяет имя индексного файла и место его хранения. Строка charset_type= используемый набор символов. Наконец preopen=1 предписывает демону поиска открыть все индексные файлы после загрузки, не дожидаясь поступления первых запросов. Определим дельта-индекс:
Настроим индексатор:
mem_limit определяет объем памяти, который будет выделен индексатору. Теперь настроим поисковый демон:
Определения searchd самоочевидны, за исключением listen=. Этот параметр можно использовать для указания того, по какому IP-адресу и порту обращаться к двоичному сетевому протоколу SphinxQL. Если нужно взаимодействовать с протоколом напрямую, можно использовать стандартный клиент MySQL, указав mysql -P 9306, и выполнять запросы, даже не запуская программу MySQL на своем компьютере. Для автоматического перестроения индексов добавим следующие задания в cron:
После построение индексов их можно использовать. Начиная с версии 0.9.9-rc2 Sphinx поддерживает бинарный протокол, используемый MySQL. В результате чего можно использовать MySQL CLI в качестве клиента для Sphinx. И наш поисковый запрос запишется следующим образом:
27.09.2016 |
популярные тэги
наука
интересно
новости
технологии
история
go
golang
программирование
it
искусственный интеллект
путешествия
природа
космос
ai
базы данных
медицина
science
анализ текстов
ии
text mining
робототехника
авто
музыка
роботы
интернет
нейронные сети
robots
space
вокруг света
postgresql
алгоритмы
гитара
животные
оружие
google
nosql
авиация
здоровье
техника
auto
|