Углубленный анализ векторного поиска 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
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.