gemlog/public/uk/manticore-as-modern-alternative-to-sphinx-search.gmi
2025-09-11 12:43:12 +03:00

162 lines
No EOL
7.5 KiB
Text
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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
```
```
<?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:
=> 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", інакше можуть бути незручності з останніми транзакціями, якщо ваш сервер чутливий до вимикання світла, а транзакції відбуваються часто (у разі ймовірності отримати збій в посундному режимі зберігання).
Зробити це можна у файлі:
``` /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 як основної БД