Мы недавно опубликовали статью о новом режиме реального времени . В этой статье мы подробно рассмотрим, как он работает и как вы можете использовать его самостоятельно. Мы узнаем, как управлять индексами в Manticore Search с помощью SQL‑запросов.
Создание индекса
Сначала подключимся к Manticore через SQL:
root@rtmode-79f9d6d867-fptcc:/# mysql -P9306 -h0
Welcome to the MariaDB monitor. Commands end with ; or g.
Your MySQL connection id is 1
Server version: 3.4.0 0686d9f0@200326 release
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
Простой оператор создания таблицы выглядит так:
MySQL [(none)]> CREATE TABLE testrt1 (title TEXT, category INT);
Это создаст индекс с идентификатором документа (который не требуется объявлять), текстовым полем и целочисленным атрибутом.
Индексы поддерживают набор параметров, которые можно указать при объявлении:
Для примера:
MySQL [(none)]> CREATE TABLE testrt2 (title TEXT, category INT) html_strip='1' docstore_compression_level = '12';
В этом индексе текст будет очищен от HTML, а уровень сжатия для хранения документов установлен на максимальный.
Если тип не указан, по умолчанию индекс будет реального времени. Если мы хотим создать распределённый индекс, необходимо указать тип:
MySQL [(none)]> CREATE TABLE testrtdist type='distributed' local='testrt1' local='testrt2';
Если вы не уверены, существует ли уже таблица, можно использовать условие 'IF NOT EXISTS', чтобы избежать ошибки:
MySQL [(none)]> CREATE TABLE IF NOT EXISTS testrt1 (title TEXT, category INT);
Также можно создать индекс, используя настройки и схему уже существующего индекса:
MySQL [(none)]> CREATE TABLE testrt3 LIKE testrt2;
Дополнительные операции с таблицами
Для удаления индекса используйте DROP TABLE:
MySQL [(none)]> DROP TABLE testrt3;
Для очистки индекса:
MySQL [(none)]> TRUNCATE TABLE testrt2;
Для добавления или удаления столбца:
MySQL [(none)]> ALTER TABLE testrt2 ADD COLUMN tagId INT;
MySQL [(none)]> ALTER TABLE testrt2 DROP COLUMN tagId;
Обратите внимание, что поля TEXT в настоящее время нельзя добавить или удалить. При необходимости изменить поля TEXT придётся пересоздать таблицу.
Также можно изменить настройки индекса:
MySQL [(none)]> ALTER TABLE testrt2 ignore_chars='.';
Обратите внимание, что настройки токенизации не применятся к уже существующим данным в полнотекстовом компоненте, только к новым документам, добавленным после ALTER.
Если необходимо обновить всю коллекцию, индекс следует пересоздать с нужными настройками.
Информация о таблице
Существует несколько операторов, предоставляющих информацию об индексе.
Для получения схемы индекса:
MySQL [(none)]> DESCRIBE testrt2;
+----------+--------+----------------+
| Field | Type | Properties |
+----------+--------+----------------+
| id | bigint | |
| title | field | indexed stored |
| category | uint | |
+----------+--------+----------------+
Информацию о количестве документов, размере и метриках производительности можно увидеть с помощью SHOW INDEX STATUS:
MySQL [(none)]> SHOW INDEX testrt2 STATUS;
+-------------------+--------------------------------------------------------------------------+
| Variable_name | Value |
+-------------------+--------------------------------------------------------------------------+
| index_type | rt |
| indexed_documents | 0 |
| indexed_bytes | 0 |
| ram_bytes | 5840 |
| disk_bytes | 331 |
| ram_chunk | 0 |
| ram_chunks_count | 0 |
| disk_chunks | 0 |
| mem_limit | 134217728 |
| ram_bytes_retired | 0 |
| tid | 0 |
| tid_saved | 0 |
| query_time_1min | {"queries":0, "avg":"-", "min":"-", "max":"-", "pct95":"-", "pct99":"-"} |
| query_time_5min | {"queries":0, "avg":"-", "min":"-", "max":"-", "pct95":"-", "pct99":"-"} |
| query_time_15min | {"queries":0, "avg":"-", "min":"-", "max":"-", "pct95":"-", "pct99":"-"} |
| query_time_total | {"queries":0, "avg":"-", "min":"-", "max":"-", "pct95":"-", "pct99":"-"} |
| found_rows_1min | {"queries":0, "avg":"-", "min":"-", "max":"-", "pct95":"-", "pct99":"-"} |
| found_rows_5min | {"queries":0, "avg":"-", "min":"-", "max":"-", "pct95":"-", "pct99":"-"} |
| found_rows_15min | {"queries":0, "avg":"-", "min":"-", "max":"-", "pct95":"-", "pct99":"-"} |
| found_rows_total | {"queries":0, "avg":"-", "min":"-", "max":"-", "pct95":"-", "pct99":"-"} |
+-------------------+--------------------------------------------------------------------------+
SHOW INDEX SETTINGS также может вывести список настроек индекса:
MySQL [(none)]> SHOW INDEX testrt2 SETTINGS;
+---------------+----------------------------------------------------------+
| Variable_name | Value |
+---------------+----------------------------------------------------------+
| settings | html_strip = 1 |
| | charset_table = non_cjk |
| | ignore_chars = . |
+---------------+----------------------------------------------------------+
Если необходимо экспортировать полное объявление индекса, используйте SHOW CREATE TABLE:
MySQL [(none)]> SHOW CREATE TABLE testrt2;
+---------+-------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------+-------------------------------------------------------------------------------------------------------------------------------+
| testrt2 | CREATE TABLE testrt2 (category integer,title text indexed stored) html_strip='1' charset_table='non_cjk' ignore_chars='.' |
+---------+-------------------------------------------------------------------------------------------------------------------------------+
Импорт индекса
RT‑индексы можно импортировать с помощью оператора IMPORT TABLE.
Файлы индекса будут скопированы в ваш data_dir, указанный в конфигурации.
Пример:
MySQL [(none)]> IMPORT TABLE movies FROM '/index/movies_rt';
MySQL [(none)]> SELECT * FROM moviesG
*************************** 1. row ***************************
id: 1
num_critic_for_reviews: 4
duration: 96
director_facebook_likes: 0
actor_3_facebook_likes: 460
actor_1_facebook_likes: 708
gross: 0
num_voted_users: 961
cast_total_facebook_likes: 2307
facenumber_in_poster: 0
num_user_for_reviews: 12
budget: 3500000
title_year: 2009
actor_2_facebook_likes: 574
movie_facebook_likes: 211
imdb_score: 4.800000
aspect_ration: 2.350000
color: Color
movie_imdb_link: http://www.imdb.com/title/tt1002561/?ref_=fn_tt_tt_1
language: English
country: USA
content_rating:
director_name: Charles Adelman
actor_2_name: Kevin Pollak
actor_1_name: Teri Polo
movie_title: 02:13
actor_3_name: Jere Burns
plot_keywords: death|forensic|murder|profiler|serial killer
...
*************************** 20. row ***************************
id: 20
num_critic_for_reviews: 1
duration: 111
director_facebook_likes: 0
actor_3_facebook_likes: 247
actor_1_facebook_likes: 1000
gross: 14616
num_voted_users: 314
cast_total_facebook_likes: 2059
facenumber_in_poster: 1
num_user_for_reviews: 10
budget: 12000000
title_year: 2015
actor_2_facebook_likes: 445
movie_facebook_likes: 26000
imdb_score: 7.500000
aspect_ration: 1.850000
color: Color
movie_imdb_link: http://www.imdb.com/title/tt3453052/?ref_=fn_tt_tt_1
language: English
country: USA
content_rating: R
director_name: Timothy Hines
actor_2_name: Kelly LeBrock
actor_1_name: Christopher Lambert
movie_title: 10 Days in a Madhouse
actor_3_name: Alexandra Callas
plot_keywords:
Мы считаем, что новый RT‑режим, ставший режимом по умолчанию, упростит обслуживание индексов в Manticore Search в большинстве случаев. В остальных случаях по‑прежнему поддерживается обычный режим. О различиях можно узнать из
нашей документации
.
<img src="RT-mode-index-optimized.webp" alt="img">
Интерактивный курс
Вы можете узнать больше о нашем администрировании индексов в реальном времени в интерактивном курсе «ManticoreSearch - RT mode - index administration», который включает командную строку для более удобного обучения.
