Выпущена новая версия Elasticsearch — современного распределенного движка полнотекстового поиска и выполнения аналитических запросов реального времени. Elasticsearch построен на основе библиотеки Apache Lucene и распространяется под лицензией Apache.
На пути от версии 1.0 к 2.0 было принято 2799 pull request'ов от 477 разработчиков.
Основные изменения в этой версии:
- В предыдущих версиях выборка данных ограничивалась комбинацией запросов (query) и фильтров (filter); запросы отличались от фильтров возможностью вычисления функции ранжирования, а фильтры от запросов — более быстрым методом выполнения и возможностью кеширования. В новой версии запросы и фильтры были объединены, а режим исполнения выбирается контекстом в котором находится запрос. Это заметно упростило логику построения сложных запросов, так же позволило провести ряд оптимизаций. Так, например, медленные запросы поиска фраз и геопоиска теперь выполняются в две стадии — сначала выполняется быстрая апроксимация в режиме «фильтра», а после — медленный уточняющий запрос.
- Многие фильтры в Elasticsearch могут выполняться в двух режимах — с поддержкой кеширования и без. В режиме с поддержкой кеширования первое применение фильтра приводит к полному вычислению значения фильтра на всех документах индекса, в режиме без кеширования фильтр вычисляется для множества документов, ограниченных предыдущими условиями. Ранее выбор режима выполнения отдавался пользователю, в новой версии режим выбирается автоматически на основе накопленной статистики выполнения запросов. Так же была повышена эффективность кеша — вместо простых bitset'ов теперь используется более быстрое и компактное представление.
- Новая реализация parent/child-отношений более эффективна в комбинациях с другими типами запросов. Также в предыдущих версия колонка _parent, используемая для связи, целиком кешировалась в оперативной памяти. В новой версии используется дисковое хранилище «doc values», что привело к существенному снижению использования оперативной памяти сервером.
- Добавлен новый тип агрегатных функций — "pipeline aggregations", позволяющий производить вычисления поверх других агрегатов. Этот режим применяется для вычисления производных, поиска максимальных и средних значений среди результатов других агрегатов, сглаживания графиков, прогнозирования временных рядов и аналогичных функций.
- Улучшения надёжности — операция индексации теперь заканчивается после выполнения fsync журнала транзакций; для всех файлов индекса вычисляются и проверяются контрольные суммы; все операции перемещения файлов индекса теперь гарантировано атомарны. Протокол управления кластером модифицирован для более быстрого распространения изменений в больших кластерах.
- Большой рефакторинг mapping'а — описания схемы данных и настроек индексации. Исправлено большое количество проблем, которые приводили к неоднозначным или неожиданным результатам. Выпущен специальный плагин для проверки совместимости схемы с новой версий и упрощения миграции.
- Для компрессии данных теперь может использоваться не только быстрый алгоритм LZ4, но и более медленный (но эффективный) DEFLATE. Смена алгоритма может быть произведена на существующем индексе перед его оптимизацией, например для исторических данных, в которых больше не ожидается изменений.
Новая версия Elasticsearch может работать с индексами, созданными предыдущими версиями (начиная с 0.90). Опубликован список изменений, которые нужно учесть при миграции с предыдущих версий.
Вместе с выходом новой версии было объявлено, что проприетарный плагин для мониторинга кластера, Marvel, теперь можно бесплатно использовать для production-установок. Коммерческая лицензия требуется только для функций мониторинга группы кластеров Elasticsearch.
>>> Подробности