# Manticore Search 28.6.6: UUID-идентификаторы документов, сортировка в `GROUP_CONCAT()` и 16 исправлений

В Manticore Search 28.6.6 UUID можно использовать как идентификаторы документов в RT-таблицах. В `GROUP_CONCAT()` появились сортировка и ограничение числа значений. В релиз также вошли 16 исправлений, связанных с резервным копированием, репликацией, обработкой запросов, SQL-совместимостью и вторичными индексами.

Вышел Manticore Search 28.6.6. Теперь в RT-таблицах можно использовать UUID-идентификаторы документов, а `GROUP_CONCAT()` умеет сортировать значения и ограничивать их количество в запросах с группировкой. Кроме того, в релиз вошли 16 исправлений, связанных с резервным копированием, репликацией, обработкой запросов, SQL-совместимостью и вторичными индексами.

В статье собраны все изменения в версиях с **28.4.5 по 28.6.6**.

---

## Что нужно знать перед обновлением

Миграция данных при обновлении не требуется. Чтобы использовать UUID, при создании новой RT-таблицы задайте `id uuid`. Существующие таблицы с числовыми ID продолжат работать без изменений. Изменить тип ID в существующей таблице с числового на UUID или обратно с помощью `ALTER TABLE` нельзя.

Два исправления особенно важны для систем в продакшене. После успешного резервного копирования RT-таблицы теперь всегда размораживаются (раньше в редких случаях этого не происходило), поэтому последующие операции записи не остаются заблокированными. При аутентифицированной репликации снова можно добавлять уже заполненную RT-таблицу с помощью `ALTER CLUSTER ... ADD`.

---

## UUID-идентификаторы документов в RT-таблицах

Во многих приложениях UUID используются в качестве основных идентификаторов документов. Раньше для работы с ними в Manticore Search приходилось отдельно сопоставлять каждый UUID с числовым ID. Теперь RT-таблицы могут напрямую использовать [UUID-идентификаторы документов](https://manual.manticoresearch.com/Creating_a_table/Data_types#UUID-document-IDs):

```sql
CREATE TABLE products_uuid(id uuid, title text, price int);
```

Manticore принимает явно заданный UUID или генерирует его автоматически, если `id` не указан в `INSERT` или `REPLACE`. В запросах UUID можно сравнивать на равенство и использовать в фильтрах `IN`; операции `REPLACE`, `UPDATE` и `DELETE` также поддерживают UUID в качестве ID.

UUID-идентификаторы пока поддерживаются только в RT-таблицах, в том числе колоночных и реплицируемых. В обычных и шардированных таблицах, а также в таблицах типа `percolate` они недоступны.

## `GROUP_CONCAT()` с сортировкой и ограничением числа значений

При группировке результатов часто нужно компактно показать самые важные значения из каждой группы. Теперь в SQL-запросах с явным `GROUP BY` функция `GROUP_CONCAT()` умеет сортировать значения и ограничивать их количество в результате:

```sql
SELECT category,
       GROUP_CONCAT(title ORDER BY price DESC SEPARATOR ', ' LIMIT 3)
FROM products
GROUP BY category;
```

Новые параметры `ORDER BY`, `SEPARATOR` и `LIMIT` позволяют сразу получить нужное число значений в заданном порядке. Больше не нужно возвращать из запроса весь список, а затем сортировать и обрезать его в приложении. Полный синтаксис приведён в [документации по `GROUP_CONCAT()`](https://manual.manticoresearch.com/Searching/Grouping#GROUP_CONCAT%28field%29).

---

## Исправления в обслуживании таблиц, резервном копировании и работе кластера

Следующие изменения касаются прежде всего повседневного обслуживания системы, а не обычного поиска:

- [Manticore Backup](https://github.com/manticoresoftware/manticoresearch-backup) 1.10.2 устраняет ошибку, из-за которой даже после успешного резервного копирования RT-таблица могла остаться замороженной, а последующие операции записи заблокированными.
- При аутентифицированной репликации передача состояния теперь работает и при добавлении в кластер заполненной RT-таблицы через `ALTER CLUSTER ... ADD`.
- При `ALTER`, `TRUNCATE`, удалении чанков и оптимизации RT-таблиц теперь удаляются устаревшие внешние файлы. Настройки Jieba сохраняются, если операция `ALTER TABLE` их не затрагивает. При попытке внести неподдерживаемые изменения в настройки теперь возвращается явная ошибка.
- [OPTIMIZE TABLE](https://manual.manticoresearch.com/Securing_and_compacting_a_table/Compacting_a_table#OPTIMIZE-TABLE) принимает имена вида `system.<table>`, поэтому можно оптимизировать отдельные физические шарды.

---

## Обработка запросов и совместимость с клиентами

Исправления затрагивают разные компоненты. Для поисковых сервисов под высокой нагрузкой особенно важны следующие:

- Если включён `boolean_simplify`, [CALL SNIPPETS](https://manual.manticoresearch.com/Searching/Highlighting#CALL-SNIPPETS) больше не тратит по несколько секунд на упрощение отдельных сложных булевых запросов перед подсветкой.
- Для длинных запросов — точных или близких по структуре к фразовым — теперь корректно рассчитывается необходимый размер стека. Ошибка в прежнем расчёте могла приводить к повреждению памяти или сбою `searchd`. Кроме того, при вычислении `local_df` для RT-таблиц с несколькими чанками и распределённых таблиц из статистики по ключевым словам исключаются дубли.
- Обновлённая колоночная библиотека исправляет ошибку, из-за которой декодер StreamVByte мог читать данные за пределами буфера. Это могло приводить к сбою при выполнении запросов со вторичными индексами, в том числе с `GROUP BY` по JSON-полям. `indextool --check` теперь сообщает о повреждённых файлах вторичных индексов вместо аварийного завершения.
- Несмотря на появление ключевого слова `USER` в синтаксисе аутентификации, функцию `USER()` по-прежнему можно вызывать; благодаря этому в клиенте MySQL снова работает команда `status`. Кроме того, в `SHOW INDEX ... STATUS` устранена гонка при одновременном вычислении перцентилей.
- Фильтры `IN(...)` по ID документов теперь корректно принимают допустимые беззнаковые 64-битные значения, превышающие `Long.MAX_VALUE`, а сочетание `LEFT JOIN` с несколькими `FACET` больше не приводит к сбою.

В релизе также устранена гонка при обработке SSL-подключений в SphinxQL, из-за которой воркеры могли загружать CPU на 100%. Исправлены ошибки в разборе ответов PHP API и Ruby API: корректные фрагменты ответа, оканчивающиеся на `"0"`, больше не теряются.

Полный список см. в [журнале изменений версии 28.6.6](https://manual.manticoresearch.com/Changelog#Version-28.6.6).

---

## Установка и обновление Manticore Search 28.6.6

Установка, как обычно, проходит согласно [руководства по установке](/install/). Если в системе настроена аутентификация или репликация, перед переключением продакшн-трафика на новую версию сверьтесь с [чек-листом внедрения аутентификации Manticore в продакшн](/blog/manticore-auth-migration-hardening-checklist/).

## Нужна помощь или хотите связаться с нами?

- Присоединяйтесь к нашему [сообществу в Slack](https://slack.manticoresearch.com)
- Загляните на [форум](https://forum.manticoresearch.com)
- Сообщайте о проблемах или предлагайте новые возможности на [GitHub](https://github.com/manticoresoftware/manticoresearch/issues)
- Пишите нам на `contact@manticoresearch.com`
