# Manticore Search 3.3.0: многопоточный RT, CREATE TABLE, EXPLAIN QUERY и многое другое

Мы рады объявить о выпуске Manticore Search 3.3.0. Загрузки доступны [здесь](https://manticoresearch.com/downloads/). Docker-образ доступен в [Docker Hub](https://hub.docker.com/r/manticoresearch/manticore).

# Новые возможности

### Многопоточный RT


Одна из двух ключевых возможностей в 3.3.0 — это **многопоточный поиск для Real-Time-индексов**. В случае Real-Time-индекса с несколькими disk chunks (что часто случается, если вы редко выполняете [OPTIMIZE](https://docs.manticoresearch.com/latest/html/sphinxql_reference/optimize_index_syntax.html#optimize-index-syntax)), использование [dist\_threads](https://docs.manticoresearch.com/latest/html/conf_options_reference/searchd_program_configuration_options.html#dist-threads) > 1 позволит поиску использовать несколько потоков и параллельно искать по disk chunks. До этого каждый RT-индекс использовал один поток, и если в нем было несколько disk chunks, все они искались по очереди, из-за чего поиск был медленным (или очень медленным). Если ваше приложение не упирается в CPU, новая функциональность может заметно повысить производительность. Причем результат может быть даже выше, чем после OPTIMIZE.


### `CREATE TABLE`<sup>α</sup> и `DROP TABLE`<sup>α</sup>

Еще одна крупная возможность, доступная начиная с 3.3.0, — это **поддержка CREATE и DROP TABLE**. Теперь, если вы используете Real-time-индексы (а мы настоятельно рекомендуем именно их), для них может вообще не быть конфигурации. Вот как теперь может выглядеть ваш конфиг:

```ini
searchd {
  listen = 9306:mysql41
  data_dir = data
  pid_file = 9306.pid
  binlog_path = data
}
```

И на этом все. После этого, чтобы создать индекс, просто выполните

```ini
mysql> create table idx(f field, a int);
Query OK, 0 rows affected (0.00 sec)
```

и ваш индекс появится:

```sql
mysql> desc idx;
+-------+--------+----------------+
| Field | Type | Properties       |
+-------+--------+----------------+
| id    | bigint |                |
| f     | field  | indexed stored |
| a     | uint   |                |
+-------+--------+----------------+
3 rows in set (0.00 sec)

```

Затем просто удалите его, когда он больше не нужен:

```sql
mysql> drop table idx;
Query OK, 0 rows affected (0.00 sec)

mysql> show tables;
Empty set (0.00 sec)
```

Это означает, что теперь из приложения легко управлять не только данными, но и схемой. Разве это не здорово?
**Внимание: эта функция находится в alpha-стадии. Она еще не документирована, синтаксис может незначительно измениться, и нам не известно о ее использовании в production. Если вы хотите стать beta-тестером, дайте знать — мы вместе убедимся, что все работает корректно.**

Чтобы использовать эту функцию, в конфигурации не должно быть определений index/source, а `data_dir` нужно задать так, как показано в примере ниже. Этот режим не поддерживает plain indexes.

Существующие конфигурации продолжают работать как прежде, но команду CREATE/DROP TABLE там использовать нельзя.


### `indexer --print-rt`


[Indexer](https://docs.manticoresearch.com/latest/html/command_line_tools_reference/indexer_command_reference.html) теперь имеет новый параметр `--print-rt`, который выгружает данные из источника plain index в виде команд INSERT для Real-Time-индекса. Вдобавок схема данных выводится как поля/атрибуты Real-Time.


### EXPLAIN QUERY


[EXPLAIN QUERY](https://docs.manticoresearch.com/latest/html/sphinxql_reference/explain_query_syntax.html) — это команда, которая возвращает дерево выполнения полнотекстового запроса, как и [SHOW PLAN](https://docs.manticoresearch.com/latest/html/sphinxql_reference/show_plan_syntax.html), но в отличие от него не выполняет реальный поиск по индексу, и индекс может быть пустым или даже иметь тип template. Вот пример:

```sql
mysql> explain query idx 'abc "def ghi" "a b c d"~5 I'\G
*************************** 1. row ***************************
Variable: transformed_tree
Value: AND(
AND(KEYWORD(abc, querypos=1)),
PHRASE(
AND(KEYWORD(def, querypos=2)),
AND(KEYWORD(ghi, querypos=3))),
PROXIMITY(distance=5,
AND(KEYWORD(b, querypos=4)),
AND(KEYWORD(c, querypos=5)),
AND(KEYWORD(d, querypos=6))))
1 row in set (0.00 sec)
```

### Другие улучшения

- Обновлена библиотека стемминга [Snowball 2.0](https://snowballstem.org/). Это увеличивает число стеммеров до [25](https://docs.manticoresearch.com/latest/html/conf_options_reference/index_configuration_options.html#morphology); все они включены в наши [пакеты](https://manticoresearch.com/downloads/)
- Команда [SHOW INDEX STATUS](https://docs.manticoresearch.com/latest/html/sphinxql_reference/show_index_status_syntax.html) получила LIKE для более удобной фильтрации
- Значительно улучшено потребление памяти для запросов с высоким значением [max\_matches](https://docs.manticoresearch.com/latest/html/sphinxql_reference/select_syntax.html#option) по распределенным индексам
- Для пакетов systemd мы изменили LimitNOFILE с `infinity` на 65536
- [Percolate Queries](https://docs.manticoresearch.com/latest/html/searching/percolate_query.html) теперь работают без блокировок - в предыдущих версиях длинный `CALL PQ` или обновление сохраненных запросов мешали друг другу


В этом выпуске исправлено множество ошибок, вот лишь некоторые из них:

- Проблемы в `HIGHLIGHT()` с макросом passage ([493a5e9](https://github.com/manticoresoftware/manticoresearch/commit/493a5e916d70fd4a3f14d1ee487234434f4a7ce3)) и удалением HTML-разметки ([ca81114](https://github.com/manticoresoftware/manticoresearch/commit/ca81114bf1ac7ea7adcc8509bdc14d1f30b4f461))
- В некоторых случаях RT-индексы создавали слишком много disk chunks ([8bea0f6](https://github.com/manticoresoftware/manticoresearch/commit/8bea0f6fd1666b817995c4dd6e67f6f1c9161638), [a82d41c)](https://github.com/manticoresoftware/manticoresearch/commit/a82d41c775692f837f267d554d7d4a4b499d69f0)
- Проблемы docstore при использовании с ATTACH ([6895374](https://github.com/manticoresoftware/manticoresearch/commit/68953740af8dca1833026d0f448c71416ed3044a)) и распределенными индексами ([d6f696e](https://github.com/manticoresoftware/manticoresearch/commit/d6f696edea53ea2b9a68251e4054e4816082c285>))





Полный список изменений см. в [release notes](https://docs.manticoresearch.com/latest/html/releasenotes.html#version-3-3-0-4-february-2020).
