Обо мне

Привет, я Майк.
Я недавно начал работать в Manticore в качестве Developer Advocate. Я человек, который не полностью оторван от ИТ, но я догоняю современные технологии. В этом блоге я буду делиться своим опытом и тем, что узнаю о Manticore. Я планирую документировать своё путешествие в формате дневника, объясняя, что такое Manticore и как его использовать. Давайте узнаем, как всё работает вместе, выявим проблемы и будем взаимодействовать с разработчиками в реальном времени.
Это мой первый пост в блоге. Если вам интересно изучать Manticore вместе со мной, я буду держать вас в курсе в:
Несколько слов о Manticore
Когда я начал изучать Manticore Search, я обнаружил, что это мощная открытая база данных. Она может выполнять быстрый полнотекстовый поиск с использованием как SQL, так и JSON, и многое другое. Она была создана в 2017 году и с тех пор прошла множество тестов и улучшений. Благодаря сильному сообществу было исправлено множество багов, и сейчас она работает очень хорошо.
Manticore отлично подходит для быстрого поиска слов, фраз и предложений, а также имеет множество других продвинутых функций. Это делает её идеальной для таких задач, как онлайн-магазины и корпоративные поисковые системы. Благодаря множеству полезных возможностей и поддержке сообщества и команды Manticore Software, легко понять, почему многие выбирают Manticore для своих поисковых нужд.
В этой статье я покажу, как начать работу с Manticore
С чего начать
Минимальная среда
- Интернет
- Не слишком старая ОС (Mac, Win или Lin — не имеет значения)
- Docker или Docker Desktop.
- Относительно прямые руки
- Сильное желание сделать мир лучше, создавая качественное, простое в использовании программное обеспечение с быстрыми базами данных и поисковыми системами для полнотекстовой информации.
Инструменты
- Консоль (или вы можете использовать Docker Desktop для подключения к контейнеру)
- Файловый менеджер (по желанию, мне нравится Midnight Commander )
- Текстовый редактор для консоли (например, mcedit, nano, vim). В примерах мы будем использовать редактор, встроенный в Midnight Commander, mcedit, чтобы не искать команды выхода для vim.
При использовании MC вам не нужно устанавливать редактор, так как встроенного достаточно. Если установлен дополнительный редактор, при первом выполнении команды [F4 Edit] MC предложит выбрать нужный. В примере будет использоваться встроенный редактор MC, который вызывается нажатием [F4] при выборе файла в интерфейсе или командой mcedit <имя файла для создания/открытия>.
Более быстрый способ — делать всё из командной строки. Я хочу быстро!
Развёртывание инфраструктуры
Мы будем проводить эксперименты с Manticore в Docker‑контейнере, так как это популярное кроссплатформенное решение, часто используемое в среде, где Manticore наиболее востребован, хотя существуют версии базы данных для всех популярных операционных систем.
Те профессионалы, которые уже умеют работать с Docker, могут пропустить это до запуска контейнера. А новички, включая меня, пройдём шаги с нуля.
Для начала вам нужно выполнить следующие шаги:
- Скачайте Docker Desktop для нашей платформы с сайта
https://www.docker.com/
:

- После установки нам нужно получить официальный образ Manticore. В верхней панели приложения есть строка поиска. Просто введите туда «ManticoreSearch».
- В результатах мы видим «manticoresearch/manticore».

- Нажмите кнопку «pull», затем переключитесь на вкладку образов.
- Затем выберите только что загруженный образ и нажмите «play».
В появившемся окне вам нужно указать некоторые дополнительные настройки:
- Имя контейнера:
manticore. - Для портов используем тот же порт, что и у базы данных, для простоты —
9306. - В переменных окружения задайте переменную
EXTRAсо значением1. Это необходимо для запуска дополнительных компонентов, которые очень полезны. Подробнее об этом здесь .
Затем нажмите «Run»
Далее вернитесь на вкладку контейнеров. Мы найдём наш контейнер в списке активных контейнеров. В выпадающем меню есть опция «Open in terminal». Откроется окно с терминалом, напрямую подключённым к вашему контейнеру.
Поздравляем, вы успешно установили Docker‑образ Manticore Search на свой компьютер.
После того как поиграл с интерфейсом Docker Desktop некоторое время, вы понимаете, что самый быстрый способ выполнить задачу — через командную строку.docker run --name manticore -p 9306:9306 -d manticoresearch/manticoredocker exec -it manticore /bin/sh
- Чтобы упростить задачу, мы установим файловый менеджер Midnight Commander внутри контейнера:
apt update
apt install mc
mc
Итак, мы обновили менеджер пакетов «apt», затем установили файловый менеджер «mc» и запустили его.
Теперь ваш терминал должен выглядеть так:
Первый шаг. Первая таблица.
Хорошо, давайте подключимся к базе данных и создадим нашу первую таблицу.
mysql -h0 -P9306
Вот флаг -h для подключения к хосту, установленный в 0, потому что мы пытаемся подключиться к localhost. Используйте флаг -P (обратите внимание на заглавную P) для подключения к порту; мы используем внутренний номер порта.
Давайте создадим таблицу с полем «info» типа текст и полем «value» типа целое число. Кроме того, добавим к этой таблице стеммер для английских слов.
CREATE TABLE demo (info TEXT, value INT) morphology = 'stem_en';
Query OK, 0 rows affected (0.00 sec)
Чтобы увидеть, какие поля были созданы при создании или изменении столбца таблицы, используйте команду desc (это как «описание»).
DESC demo
+-------+-----------+------------------+
| Field | Type | Properties |
+-------+-----------+------------------+
| id | bigint | |
| info | text | indexed stored |
| value | uint | |
+-------+-----------+------------------+
3 rows in set (0.00 sec)
Также вы можете проверить, какой алгоритм стемминга или лемматизации связан с таблицей:
SHOW TABLE demo SETTINGS;
+---------------+-----------------------+
| Variable_name | Value |
+---------------+-----------------------+
| settings | morphology = stem_en |
+---------------+-----------------------+
1 row in set (0.01 sec)
Добавим данные в таблицу. Ниже показан вариант добавления одной записи за раз:
INSERT INTO demo (info, value) VALUES ('Walking down the street', 1);
Query OK, 1 row affected (0.01 sec)
а вот как добавить записи пакетно:
INSERT INTO demo (info, value) VALUES ('Walking along the embankment', 2), ('Walking the dog', 3), ('Reading a book', 4), ('Book read ', 5);
Query OK, 3 rows affected (0.00 sec)
Теперь проверим, что мы записали в таблице:
SELECT * FROM demo;
+-----------------------+----------------------------------------------------+-------+
| id | info | value |
+-----------------------+----------------------------------------------------+-------+
| 8217204862853578790 | Walking down the street | 1 |
| 8217204862853578791 | Walking along the embankment | 2 |
| 8217204862853578792 | Walking the dog | 3 |
| 8217204862853578793 | Reading a book | 4 |
| 8217204862853578794 | Book read | 5 |
+-----------------------+----------------------------------------------------+-------+
5 rows in set (0.01 sec)
Давайте поискать слово, близкое по смыслу к добавленным:
SELECT * FROM demo WHERE match('read');
+---------------------+-----------------------------------+-------+
| id | info | value |
+---------------------+-----------------------------------+-------+
| 8217204862853578794 | Book read | 5 |
| 8217204862853578793 | Reading a book | 4 |
+---------------------+-----------------------------------+-------+
2 rows in set (0.01 sec)
Вы также можете увидеть ключевое слово, по которому найдены записи, их количество, документы и многое другое:
SHOW META;
+----------------+----------+
| Variable_name | Value |
+----------------+----------+
| total | 2 |
| total_found | 2 |
| total_relation | eq |
| time | 0.000 |
| keyword[0] | read |
| docs[0] | 2 |
| hits[0] | 2 |
+----------------+----------+
7 rows in set (0.01 sec)
Чтобы работать с полями, не участвующими в полнотекстовом поиске, атрибутами, вы можете использовать классические SQL‑операторы фильтрации:
SELECT * FROM demo WHERE value > 3;
+---------------------+-----------------------------------+-------+
| id | info | value |
+---------------------+-----------------------------------+-------+
| 8217204862853578794 | Book read | 5 |
| 8217204862853578793 | Reading a book | 4 |
+---------------------+-----------------------------------+-------+
2 rows in set (0.01 sec)
Удаление записей можно выполнять так же, как запросы SELECT:
DELETE FROM demo WHERE value = 5;
Query OK, 1 row affected (0.01 sec)
DELETE FROM demo WHERE match ('street');
Query OK, 1 row affected (0.01 sec)
DELETE FROM demo WHERE id = 8217204862853578791;
Query OK, 1 row affected (0.00 sec)
SELECT * FROM demo;
+---------------------+---------------------------------+-------+
| id | info | value |
+---------------------+---------------------------------+-------+
| 8217204862853578792 | Walking the dog | 3 |
| 8217204862853578793 | Reading a book | 4 |
+---------------------+---------------------------------+-------+
2 rows in set (0.00 sec)
Почему бы вам не попробовать добавить и поискать несколько записей? Когда закончите, мы перейдём к следующему.
Не забудьте отключиться:
exit;
На сегодня всё, в следующий раз мы посмотрим, как изменить файл форм слов в существующей таблице и как обновлять наши записи.

