Когда-нибудь задумывались, как создать таблицы в 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
- Клонирование таблиц для быстрого дублирования
- Конфигурационные файлы для расширенных сценариев
Каждый подход имеет свои области применения, и выбор правильного зависит от ваших конкретных нужд. Режим реального времени (по умолчанию) предлагает простоту и гибкость для большинства случаев использования, в то время как подход с конфигурационным файлом предоставляет больше контроля и облегчает развертывание на серверах.
Челлендж для читателей: Попробуйте создать таблицу, используя каждый метод, и посмотрите, какой из них лучше всего подходит для вашего рабочего процесса!
Предпочитаете смотреть, а не читать? Ознакомьтесь с нашим подробным видеоуроком по этой теме: