initial commit

This commit is contained in:
postscriptum 2025-11-01 14:28:20 +02:00
commit d4994cde4c
61 changed files with 7044 additions and 0 deletions

View file

@ -0,0 +1,120 @@
# 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) - повністю сумісний.
## Інтеграція
Проект має багато офіційних бібліотек для різних мов програмування, зокрема [manticore-php](https://github.com/manticoresoftware/manticoresearch-php). Розгортання програми з цією бібліотекою настільки просте, що зводиться до наступних рядків:
`composer require manticoresoftware/manticoresearch-php`
```
<?php
$client = new \Manticoresearch\Client(
[
'host' => '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](https://devzone.org.ua/post/yggdrasil-mereznii-protokol-z-decentralizovanim-routingom). Наразі містить в своєму індексі близько 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](https://manual.manticoresearch.com/Logging/Binary_logging#Binary-flushing-strategies) в режим "1", інакше можуть бути незручності з останніми транзакціями, якщо ваш сервер чутливий до вимикання світла, а транзакції відбуваються часто (у разі ймовірності отримати збій в посундному режимі зберігання).
Зробити це можна у файлі:
```
#/etc/manticoresearch/manticore.conf
searchd {
...
binlog_flush = 1
}
```
## Посилання
* [Офіційний сайт Manticore](https://manticoresearch.com)