Когда-нибудь задумывались, как создать таблицы в Manticore Search? Независимо от того, только ли вы начинаете или хотите оптимизировать свою настройку, мы вас поддержим. В этом руководстве мы рассмотрим несколько подходов к созданию таблиц - от самого простого метода авто-схемы до более сложных конфигурационных опций.
Магия авто-схемы: Никакой конфигурации не требуется
Что если мы скажем вам, что вам даже не нужно явно создавать таблицу? Благодаря функции авто-схемы Manticore вы можете начать вставлять данные прямо сейчас. Давайте посмотрим на эту магию в действии:
drop table if exists test;
Query OK, 0 rows affected (0.00 sec)
insert into test (name, in_stock, price, properties) values('nice bag', 117, 1.15, '{"color": "red"}');
Query OK, 1 row affected (0.01 sec)
Вот и всё! Таблица автоматически создана. Давайте проверим её структуру:
desc test;
+------------+--------+----------------+
| Field | Type | Properties |
+------------+--------+----------------+
| id | bigint | |
| name | text | indexed stored |
| in_stock | uint | |
| price | float | |
| properties | json | |
+------------+--------+----------------+
5 rows in set (0.01 sec)
И наши данные уже там:
select * from test;
+---------------------+----------+----------+----------+-----------------+
| id | name | in_stock | price | properties |
+---------------------+----------+----------+----------+-----------------+
| 1516257118578016257 | nice bag | 117 | 1.150000 | {"color":"red"} |
+---------------------+----------+----------+----------+-----------------+
1 row in set (0.00 sec)
--- 1 out of 1 results in 1ms ---
Совет: Хотя авто-схема удобна, у неё есть свои недостатки. Система определяет типы полей на основе вашего первого документа, что может не всегда соответствовать вашим намерениям. Например, вы можете захотеть строковый атрибут, но он может быть создан как полнотекстовое поле.
Создание таблиц вручную: Взять под контроль
Когда вам нужен точный контроль над структурой вашей таблицы, ручное создание - это то, что вам нужно. Вот как это сделать с помощью SQL:
drop table if exists test;
Query OK, 0 rows affected (0.01 sec)
create table test(name text, in_stock int, price float, properties json);
Query OK, 0 rows affected (0.00 sec)
HTTP способ: REST API для создания таблиц
Предпочитаете работать с HTTP? Manticore вас поддержит! Вы можете использовать конечную точку /cli для управления вашими таблицами:
curl "0:9308/cli" -d 'drop table if exists test'
Query OK, 0 rows affected (0.002 sec)
curl "0:9308/cli" -d 'create table test(name text, in_stock int, price float, properties json)'
Query OK, 0 rows affected (0.011 sec)
curl "0:9308/cli" -d 'desc test'
+------------+--------+----------------+
| Field | Type | Properties |
+------------+--------+----------------+
| id | bigint | |
| name | text | indexed stored |
| in_stock | uint | |
| price | float | |
| properties | json | |
+------------+--------+----------------+
5 rows in set (0.001 sec)
Клонирование таблиц: Работайте умнее, а не усерднее
Нужна таблица с такой же структурой, как у существующей? Оператор CREATE TABLE LIKE - ваш друг:
drop table if exists test2;
Query OK, 0 rows affected (0.00 sec)
create table test2 like test;
Query OK, 0 rows affected (0.01 sec)
desc test2;
+------------+--------+----------------+
| Field | Type | Properties |
+------------+--------+----------------+
| id | bigint | |
| name | text | indexed stored |
| in_stock | uint | |
| price | float | |
| properties | json | |
+------------+--------+----------------+
5 rows in set (0.00 sec)
Расширенная конфигурация: Использование конфигурационных файлов
Хотя режим реального времени является рекомендуемым по умолчанию, иногда вам нужно больше контроля или вы хотите заранее объявить вещи. Вот где конфигурационные файлы становятся полезными. Вот пример конфигурации, который демонстрирует как таблицы в реальном времени, так и обычные таблицы:
searchd {
listen = 9315:mysql41
log = searchd.log
pid_file = searchd.pid
binlog_path =
}
source src {
type = csvpipe
csvpipe_command = echo "1,abc" && echo "3,def"
csvpipe_field = F
}
table plain {
type = plain
source = src
path = /tmp/plain
}
table goods {
type = rt
path = /tmp/rt
rt_field = title
rt_attr_uint = quantity
rt_attr_float = price
}
После запуска Manticore с этой конфигурацией:
mysql -P9315 -h0 -e "show tables"
+-------+------+
| Table | Type |
+-------+------+
| goods | rt |
+-------+------+
Чтобы создать и заполнить обычную таблицу, нам нужно запустить индексатор:
indexer -c manticore_test.conf --all --rotate
После перезагрузки таблиц:
mysql -P9315 -h0 -e "show tables"
+-------+-------+
| Table | Type |
+-------+-------+
| goods | rt |
| plain | local |
+-------+-------+
mysql -P9315 -v -h0 -e "select * from goods; select * from plain"
--------------
select * from goods
--------------
--------------
select * from plain
--------------
+------+------+
| id | f |
+------+------+
| 1 | abc |
| 3 | def |
+------+------+
Заключение
Мы рассмотрели несколько способов создания таблиц в Manticore Search:
- Авто-схема для быстрого старта
- Ручное создание для точного контроля
- HTTP API для управления на основе REST
- Клонирование таблиц для быстрого дублирования
- Конфигурационные файлы для сложных сценариев
Каждый подход имеет свои случаи использования, и выбор правильного зависит от ваших конкретных потребностей. Режим реального времени (по умолчанию) предлагает простоту и гибкость для большинства случаев использования, в то время как подход с конфигурационным файлом предоставляет больше контроля и упрощает развертывание на серверах.
Задача для читателя: Попробуйте создать таблицу, используя каждый метод, и посмотрите, какой из них лучше всего подходит для вашего рабочего процесса!
Предпочитаете смотреть, а не читать? Ознакомьтесь с нашим подробным видеоуроком по этой теме:
