blog-post

Manticore Search - RT mode - управление индексами Окончательное руководство

Мы недавно опубликовали статью о новом режиме реального времени . В этой статье мы подробно рассмотрим, как он работает и как вы можете использовать его самостоятельно. Мы узнаем, как манипулировать индексами в Manticore Search с помощью SQL-запросов.

Создание индекса


Сначала подключимся к Manticore через SQL:

root@rtmode-79f9d6d867-fptcc:/# mysql -P9306 -h0
Добро пожаловать в монитор MariaDB. Команды заканчиваются ; или g.
Ваш идентификатор подключения MySQL 1
Версия сервера: 3.4.0 0686d9f0@200326 release
Авторские права (c) 2000, 2018, Oracle, MariaDB Corporation Ab и другие.
Введите 'help;' или 'h' для получения справки. Введите 'c' для очистки текущего входного выражения.

Простое выражение для создания таблицы выглядит следующим образом:

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;

Обратите внимание, что текстовые поля в настоящее время не могут быть добавлены или убраны. Вам нужно будет воссоздать таблицу, если вы хотите изменить текстовые поля.

Также возможно изменить настройки индекса:

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”, который включает командную строку для удобства обучения.

Установить Manticore Search

Установить Manticore Search