⚠️ Эта страница автоматически переведена, и перевод может быть несовершенным.

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

author image

Мы рады объявить о выпуске Manticore Search 3.3.0. Загрузки доступны здесь . Docker-образ доступен в Docker Hub .

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

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

Одна из двух ключевых возможностей в 3.3.0 — это многопоточный поиск для Real-Time-индексов. В случае Real-Time-индекса с несколькими disk chunks (что часто случается, если вы редко выполняете OPTIMIZE ), использование dist_threads > 1 позволит поиску использовать несколько потоков и параллельно искать по disk chunks. До этого каждый RT-индекс использовал один поток, и если в нем было несколько disk chunks, все они искались по очереди, из-за чего поиск был медленным (или очень медленным). Если ваше приложение не упирается в CPU, новая функциональность может заметно повысить производительность. Причем результат может быть даже выше, чем после OPTIMIZE.

CREATE TABLEα и DROP TABLEα

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

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

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

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

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

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

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

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 теперь имеет новый параметр --print-rt, который выгружает данные из источника plain index в виде команд INSERT для Real-Time-индекса. Вдобавок схема данных выводится как поля/атрибуты Real-Time.

EXPLAIN QUERY

EXPLAIN QUERY — это команда, которая возвращает дерево выполнения полнотекстового запроса, как и SHOW PLAN , но в отличие от него не выполняет реальный поиск по индексу, и индекс может быть пустым или даже иметь тип template. Вот пример:

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 . Это увеличивает число стеммеров до 25 ; все они включены в наши пакеты
  • Команда SHOW INDEX STATUS получила LIKE для более удобной фильтрации
  • Значительно улучшено потребление памяти для запросов с высоким значением max_matches по распределенным индексам
  • Для пакетов systemd мы изменили LimitNOFILE с infinity на 65536
  • Percolate Queries теперь работают без блокировок - в предыдущих версиях длинный CALL PQ или обновление сохраненных запросов мешали друг другу

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

  • Проблемы в HIGHLIGHT() с макросом passage ( 493a5e9 ) и удалением HTML-разметки ( ca81114 )
  • В некоторых случаях RT-индексы создавали слишком много disk chunks ( 8bea0f6 , a82d41c)
  • Проблемы docstore при использовании с ATTACH ( 6895374 ) и распределенными индексами ( d6f696e )

Полный список изменений см. в release notes .

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

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