# Manticore як сучасна альтернатива Sphinx Багато хто використовує для повнотекстового пошуку рушій Sphinx: => https://sphinxsearch.com і пише для нього нові програми, але мало хто знає про його сучасну реалізацію - Manticore: => https://manticoresearch.com Класично, сферою застосування може бути пошуковий сервер для сайту, будь якої бази даних, індекс кравлера інтернет / локальної мережі, тощо. У той час, як Sphinx версії 3 і досі має закритий код, Manticore - це форк відкритого Sphinx 2. Наразі активно розробляється, має живу спільноту і містить багато доповнень, особливо в плані автоматизації real-time індексів. Окрім того, Manticore у більшості випадків може замінити собою сервер PostgreSQL або MySQL, де не потрібна гнучка вибірка і багаторівневі запити. Таким чином, можна значно заощадити на використанні жорсткого диску для великих індексів а також зменшити використання пам'яті у разі, якщо MySQL використовується просто як основна база даних (до якої раніше звертався Sphinx через document ID). ## Встановлення На прикладі Debian / Linux, доволі просте: ``` wget https://repo.manticoresearch.com/manticore-repo.noarch.deb dpkg -i manticore-repo.noarch.deb apt update apt install manticore manticore-extra ``` Сервіс одразу буде доступний через systemd: ``` systemctl start manticore ``` Працює сервер на порті `9308` Після запуску, можна підключитись клієнтом MySQL і взаємодіяти через SphinxQL: => http://sphinxsearch.com/docs/current/sphinxql-reference.html ``` mysql -P9306 -h0 ``` В рамках цього матеріалу не будуть описані детальні мануали. Оскільки проєкт має хорошу документацію: => https://manual.manticoresearch.com/Introduction досвідчені користувачі Sphinx з легкістю можуть застосовувати свій досвід, наприклад в "searchd", що має таку само архітектуру, а синтаксис "extended-search": => https://sphinxsearch.com/docs/latest/extended-syntax.html - повністю сумісний. ## Інтеграція Проєкт має багато офіційних бібліотек для різних мов програмування, зокрема: => https://github.com/manticoresoftware/manticoresearch-php Розгортання програми з цією бібліотекою настільки просте, що зводиться до наступних рядків: ``` composer require manticoresoftware/manticoresearch-php ``` ``` 'localhost', 'port' => 9308 ] ); $index = $client->index( 'test_index' ); $index->create( [ 'field1' => [ 'type' => 'text' ], 'field2' => [ 'type' => 'text' ] ] ); $index->addDocument( [ 'field1' => 'hello', 'field1' => 'world' ], ); $results = $index->search('hello')->get(); ``` Кому цікавий приклад програми на PHP, може відвідати сторінку дуже простого кравлера з веб інтерфейсом: => https://github.com/YGGverse/Yo який був написаний в максимально короткі терміни для мережі Yggdrasil: => yggdrasil-is-network-with-distributed-routing.gmi Yggdrasil - мережа з децентралізованим роутингом Наразі містить в своєму індексі близько 10.000.000 сторінок, при цьому потужності серверу рівні мінімальному тарифу VPS за 5 євро. Для роботи з SphinxSQL в PHP зручно використовувати "php-pdo"; для фільтрації деяких текстових полів - можна додати окреме поле "crc32", також такий підхід можна використовувати у якості Document ID (коли є потреба зменшити об'єм даних і не критична точність) ## Бекапи Декілька слів про бекапи: їх традиційно два типи - логічний і фізичний. ### Логічний бекап Дозволяє генерувати SQL дампи, які наприклад зручно читати, але вони потребують більше ресурсів, тому виконуються рідше. Приклад створення дампу буде таким: ``` mysqldump -h0 -P9306 manticore test_index > test_index.sql ``` ### Фізичний бекап Такий спосіб передбачає копіювання "сирих" даних до відповідної теки, не вимагає багато ресурсів на обчислення і виконується частіше: ``` /usr/bin/manticore-backup --backup-dir=/home/backup/manticore ``` ## Власний досвід Працювати з Manticore одне задоволення, що доводилось робити руками в Sphinx - вже працює з коробки. Маю не перший проєкт на цьому рушії, подекуди повністю відмовився від MySQL, хоч іноді це не дуже зручно, але більше не витрачаю свій час на проєктування в MySQL Workbench і віддаю перевагу прямому зберіганню даних до індексу в менш нормалізованому, але більш швидкому в розробці форматі. Єдине, що б радив зробити, це перемкнути стандартний рівень "binlog" в режим "1", інакше можуть бути незручності з останніми транзакціями, якщо ваш сервер чутливий до вимикання світла, а транзакції відбуваються часто (у разі ймовірності отримати збій в посeкундному режимі зберігання). Зробити це можна у файлі: ``` /etc/manticoresearch/manticore.conf searchd { ... binlog_flush = 1 } ``` => https://manual.manticoresearch.com/Logging/Binary_logging#Binary-flushing-strategies Детальніше про стратегії бінарних журналів ## Посилання => https://manticoresearch.com Офіційний сайт Manticore ## Дивіться також => manticore-as-primary-database-usage-issues.gmi Незручні моменти в роботі з Manticore як основної БД