Углубленный анализ векторного поиска Elasticsearch: сравнение и оценка с реализацией плагина OpenSearch
Углубленный анализ векторного поиска Elasticsearch: сравнение и оценка с реализацией плагина OpenSearch

введение

В сфере поиска информации,Технология векторного поиска стала горячей темой в последние годы.,Он преобразует текст в векторы,Достижение более точных и эффективных результатов поиска. во многих поисковых системах и базах данных,И Elasticsearch, и OpenSearch обеспечивают поддержку векторного поиска.,Но есть существенные различия в том, как они реализуются. Elasticsearch имеет векторный поиск, встроенный непосредственно в систему, что является одной из его основных функций.,OpenSearch предоставляет аналогичные функции в виде плагинов. Эта разница влияет не только на опыт разработчиков.,Это также по-разному влияет на производительность и гибкость. поэтому,Понять характеристики этих двух реализаций и технические детали, стоящие за ними.,Решающее значение для выбора правильного поискового решения.

Введение в векторный поиск Elasticsearch

Elasticsearch Это масштабируемая система полнотекстового поиска и анализа с открытым исходным кодом, которая позволяет пользователям быстро и в режиме реального времени хранить, искать и анализировать большие объемы данных. Как мы упоминали в статье Elasticsearch Векторный поиск: обоснование дизайна Представлено в Elasticsearch Векторный поиск находится в LuceneКитайская нативная реализация,Воспользуйтесь всеми преимуществами распределенной архитектуры。dense Тип данных вектор интегрирован в Lucene в файле сегмента

Новые векторы сначала буферизуются в память при индексировании, а когда буферы индексов заполнены или изменения необходимо сделать видимыми, эти буферы сериализуются и становятся частью сегмента. Затем эти сегменты периодически объединяются, чтобы оптимизировать время поиска и контролировать общее количество сегментов.

Lucene использует алгоритм Hierarchical Navigable Small World (HNSW) для индексации векторов. HNSW оптимизирует процесс поиска, организуя векторы в графовую структуру, в которой похожие векторы связаны друг с другом. Этот подход пользуется популярностью из-за его простоты, хорошей производительности в тестах и ​​поддержки инкрементных вставок.

Операция поиска должна учитывать совпадения с верхними векторами для всех сегментов индекса и иметь возможность идентифицировать и исключать документы, помеченные как удаленные. в последнем Elasticsearch версия, Elasticsearch производительность повышается за счет одновременного выполнения векторного поиска в нескольких сегментах и ​​использования чего-то вроде MaxBlockWAND Алгоритм пропуска сегментов, не содержащих конкуренции, для уменьшения задержки доступа.

сделай это,Самая большая выгода – это,Векторный поиск в индексе Lucene,Гарантирует, что векторный поиск может быть легко интегрирован с другими функциями Elasticsearch, такими как межкластерный поиск, снимок/восстановление и т. д.,в то же время,Использование стратегии сегментирования Lucene и кэширования страниц,Реализация векторного поиска оптимизирована по производительности:

  • Набор данных выходит за пределы общего размера оперативной памяти
  • Поддержка поиска без блокировки и повышение эффективности параллелизма.
  • Поддержка поиска по нескольким изображениям для уменьшения задержки поиска.
  • Поддерживает поэтапные изменения, добавление, удаление или обновление новых векторов в любое время.
  • Согласованность видимости с другими структурами данных для обеспечения точных результатов поиска.
  • Дополнительные снимки для поддержания эффективности поиска
  • Поддержка фильтрации и гибридного поиска, а также эффективная интеграция с другими функциями (межкластерный поиск, ES|QL).
  • Совместимость с другими функциями, такими как агрегация, безопасность, сортировка и т. д.

Ключевые этапы векторного поиска Elasticsearch

  • 2019: В Elasticsearch версии 7.0 представлена ​​предварительная поддержка векторного поиска с помощью типа поля Densent_vector, что позволяет пользователям хранить плотные векторы и выполнять вычисления косинусного сходства. Это означает, что Elasticsearch официально выходит в область векторного поиска.
  • 2020: По мере развития версии Elasticsearch добавляет больше операций и функций для векторов, таких как оценка векторов скриптами и более сложные возможности запросов для векторных полей.
  • 2021: Выпущена версия Elasticsearch 7.12, в которой представлена ​​экспериментальная поддержка функции поиска k-ближайшего соседа (k-NN), что делает поиск на основе сходства более эффективным. Добавление этой функции значительно расширяет возможности Elasticsearch по обработке векторного поиска.
  • 2022 год и далее: Elasticsearch продолжает углубляться и расширяться в области векторного поиска,Включает оптимизированный векторный поиск производительности.,Расширенные API, связанные с векторным поиском,и внедрение новых интеграций машинного обучения,Делает преобразование текста в вектор и поиск более гибкими и мощными.

Обзор векторного поиска OpenSearch

OpenSearch — это ветвь, поддерживаемая AWS, полученная из Elasticsearch версии 7.10. Подобно Elasticsearch, он также предоставляет широкие возможности полнотекстового поиска. Разница в том, что поддержка векторного поиска в OpenSearch осуществляется в основном через внешние библиотеки nmslib и faiss и глубоко интегрирована в виде подключаемого модуля.

Opensearch пытается реализовать векторный поиск путем интеграции библиотек nmslib и faiss, написанных на C++, которые оптимизированы для приблизительного поиска k-NN (ближайшего соседа). Хотя этот подход теоретически может повысить эффективность и точность обработки крупномасштабных поисков многомерных векторов, такая интеграция не лишена проблем. Для открытого поиска требуется через Java Native Interface (JNI) для создания моста,Это позволяет среде Opensearch на основе Java напрямую вызывать эти внешние библиотеки. Это не только увеличивает сложность системы.,Также могут быть введены зависимости от внешней среды.

В открытом поиске,Индексы, созданные с помощью nmslib или faiss, называются «индексами собственной библиотеки».(Native library индексы). Эти индексы создаются на этапе построения индекса.,и загружается в память при первом поиске. Lucene выполняет поиск в каждом сегменте последовательно,и возвращает количество лучших результатов на основе оценки на уровне сегмента(более высокий балл=лучшие результаты)。Использование внешних индексов означает, что во время смешанного поиска Opensearch может лишь просто объединять результаты многосторонних вызовов и не может выполнять органические смешанные запросы к другим полям в той же структуре данных.

С точки зрения распределения ресурсов,Определенный процент оперативной памяти в кластере Opensearch зарезервирован для кучи JVM.,иk-NNПлагины могут использовать только оставшиесяRAMчасть загрузки пользователя называетсяNative library indexes。По умолчанию,Этот лимит установлен на уровне 50%.,Но это также означает, что при очень разнообразном составе запросов,Если не оснащен большим объемом памяти,В противном случае Родной library Индексы и другие собственные структуры данных Lucene будут перенесены в память вне кучи.

в общем,Хотя попытка Opensearch предоставить возможности векторного поиска за счет интеграции nmslib и faiss заслуживает признания.,Однако этот метод создает такие проблемы, как сложность системы, начальная задержка запроса, ограничения на выделение ресурсов и нагрузка на обслуживание.,Все это в определенной степени влияет на пользовательский опыт и производительность системы. Для тех, кто ищет эффективное, стабильное решение для векторного поиска с малой задержкой.,Эти проблемы могут стать препятствием для выбора Opensearch.

Ключевые вехи векторного поиска OpenSearch

2021: Запущен проект OpenSearch, возглавляемый Amazon Web Services (AWS) и основанный на ответвлениях кода Elasticsearch 7.10.2 и Kibana 7.10.2. Хотя специальные функции векторного поиска не были включены в первоначальную версию, последующие обновления быстро последовали за развитием области векторного поиска.

Вторая половина 2021 года: OpenSearch начинает внедрять возможности векторного поиска.,проходитьформа плагинаПоддерживает плотное векторное хранение и поиск по сходству.,Аналогично функции векторного поиска Elasticsearch.

2022: OpenSearch расширяет возможности векторного поиска,Включает поддержку внедрения алгоритма k-NN.,А также оптимизация производительности и удобства векторного поиска.

Elasticsearch против OpenSearch

Когда мы детально сравниваем различия в реализации векторного поиска между Elasticsearch и OpenSearch, мы можем рассмотреть их по нескольким измерениям: производительность, простота использования, масштабируемость и экосистема.

  • производительность:ElasticsearchВстроенный векторный поиск в качестве основной функции.,Может обеспечить более оптимизированную производительность при обработке векторных поисковых запросов. В сравнении,Реализация векторного поиска OpenSearch через подключаемые модули в некоторых случаях может сталкиваться с узкими местами производительности.
  • Простота использования:ElasticsearchОбеспечивает относительно простую поддержку векторного поиска.,Может использоваться без дополнительной настройки.,Это преимущество для пользователей, которые хотят быстро развернуть возможности векторного поиска. Хотя OpenSearch требует установки плагина для включения векторного поиска,Но обеспечивает большее пространство для настройки.
  • Масштабируемостьиэкосистема:OpenSearchВставной механизм обеспечивает мощную Масштабируемость,Пользователи могут расширить возможности векторного поиска, установив различные плагины. Хотя Elasticsearch имеет встроенный векторный поиск в установке по умолчанию.,Но благодаря богатому API и возможностям интеграции,Он также может достичь высокой степени настройки и расширения.

Elasticsearch против OpenSearch

Сравнивая реализации векторного поиска Elasticsearch и Opensearch, мы можем изучить различия между ними по четырем измерениям: производительность, простота использования, масштабируемость и экосистема.

производительность

Elasticsearch:ElasticsearchПоиск векторов осуществляется непосредственно вLuceneинтегрированный уровень,Использование алгоритма иерархического навигационного малого мира (HNSW),Такая интеграция снижает зависимость от внешних,Это обеспечивает стабильный и эффективный поиск производительности. Поскольку данные и индексы хранятся в одной схеме,Elasticsearch может эффективно управлять ресурсами,Сократите время загрузки,особеннопроходить Оптимизированное управление памятью、Стратегия слияния индексов сСтратегия сегментирования параллельных запросов

Кроме того, благодаря Java 20вPanamaпроект,Начиная с версии 8.9,Векторный поиск на Elasticsearch,Приложения, использующие инструкции SIMD,производительность значительно улучшилась.

Opensearch:ХотяOpensearchпредставилnmslibиfaissЭти два мощныхC++библиотека для реализации векторного поиска,Но поскольку эти реализации существуют в виде плагина,и общаться со средой Java через JNI,Могут быть введены дополнительные накладные расходы на производительность. Для приложений, требующих быстрого реагирования,Это может стать узким местом производительности.

Простота использования

Elasticsearch:потому чтоElasticsearchФункция векторного поиска встроена.,Пользователям не нужно устанавливать дополнительные плагины или выполнять сложную настройку для его использования. Эта бесшовная интеграция предоставляет пользователям более простой и понятный интерфейс.

Opensearch:Opensearchпроходить Плагин предоставляет функцию векторного поиска.,Хотя это повышает гибкость системы,Но то же время Также требуются пользователисосредоточиться установка плагина、Конфигурацияи Совместимость версий,и параметры API, связанные с плагином. Для непрофессиональных пользователей,Это может затруднить использование.

Масштабируемость

Elasticsearch:ElasticsearchВозможность векторного поискаLuceneНепрерывная оптимизацияипрогресс,Благодаря тесно интегрированной архитектуре,Elasticsearch обеспечивает лучший контроль над памятью и вычислительными ресурсами.,Обеспечивает хорошую Масштабируемость для обработки крупномасштабных данных.

Opensearch:использоватьnmslibиfaissПредоставляемые возможности поиска векторов теоретически могут достигать очень высоких значений.производительность,Но на самом деле это может быть ограничено накладными расходами на вызовы JNI и конкуренцией за ресурсы. также,Для собственных библиотек, работающих вне JVM,Трудно добиться точного управления ресурсами и прогнозирования.

экосистема

Elasticsearch:ElasticsearchЗа этим стоит сильное сообществои Богатые плагиныэкосистемаподдерживать,Пользователи могут легко найти помощь и ресурсы. Достижения в области векторного поиска также выигрывают от вклада и отзывов сообщества.

Opensearch:Opensearchпытатьсяпроходитьоткрытьи Гибкий механизм плагинов привлекает к участию больше разработчиков,Но для конкретного плагина векторного поиска,Может зависеть от активности и содержания конкретного сообщества.

Подвести итог

В итоге,Elasticsearch и OpenSearch имеют свои сильные и слабые стороны в реализации векторного поиска. Какой из них выбрать, зависит от конкретного сценария применения, требований к производительности и предпочтений пользователя между Простота использования и Масштабируемость. в следующей части,Мы рассмотрим сценарии применения и лучшие практики для обеих платформ.,Предоставим вам практические рекомендации и советы.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose