В сфере поиска информации,Технология векторного поиска стала горячей темой в последние годы.,Он преобразует текст в векторы,Достижение более точных и эффективных результатов поиска. во многих поисковых системах и базах данных,И Elasticsearch, и OpenSearch обеспечивают поддержку векторного поиска.,Но есть существенные различия в том, как они реализуются. Elasticsearch имеет векторный поиск, встроенный непосредственно в систему, что является одной из его основных функций.,OpenSearch предоставляет аналогичные функции в виде плагинов. Эта разница влияет не только на опыт разработчиков.,Это также по-разному влияет на производительность и гибкость. поэтому,Понять характеристики этих двух реализаций и технические детали, стоящие за ними.,Решающее значение для выбора правильного поискового решения.
Elasticsearch Это масштабируемая система полнотекстового поиска и анализа с открытым исходным кодом, которая позволяет пользователям быстро и в режиме реального времени хранить, искать и анализировать большие объемы данных. Как мы упоминали в статье Elasticsearch Векторный поиск: обоснование дизайна Представлено в Elasticsearch Векторный поиск находится в LuceneКитайская нативная реализация,Воспользуйтесь всеми преимуществами распределенной архитектуры。dense Тип данных вектор интегрирован в Lucene в файле сегмента:
Новые векторы сначала буферизуются в память при индексировании, а когда буферы индексов заполнены или изменения необходимо сделать видимыми, эти буферы сериализуются и становятся частью сегмента. Затем эти сегменты периодически объединяются, чтобы оптимизировать время поиска и контролировать общее количество сегментов.
Lucene использует алгоритм Hierarchical Navigable Small World (HNSW) для индексации векторов. HNSW оптимизирует процесс поиска, организуя векторы в графовую структуру, в которой похожие векторы связаны друг с другом. Этот подход пользуется популярностью из-за его простоты, хорошей производительности в тестах и поддержки инкрементных вставок.
Операция поиска должна учитывать совпадения с верхними векторами для всех сегментов индекса и иметь возможность идентифицировать и исключать документы, помеченные как удаленные. в последнем Elasticsearch версия, Elasticsearch производительность повышается за счет одновременного выполнения векторного поиска в нескольких сегментах и использования чего-то вроде MaxBlockWAND Алгоритм пропуска сегментов, не содержащих конкуренции, для уменьшения задержки доступа.
сделай это,Самая большая выгода – это,Векторный поиск в индексе Lucene,Гарантирует, что векторный поиск может быть легко интегрирован с другими функциями Elasticsearch, такими как межкластерный поиск, снимок/восстановление и т. д.,в то же время,Использование стратегии сегментирования Lucene и кэширования страниц,Реализация векторного поиска оптимизирована по производительности:
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.
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: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 имеют свои сильные и слабые стороны в реализации векторного поиска. Какой из них выбрать, зависит от конкретного сценария применения, требований к производительности и предпочтений пользователя между Простота использования и Масштабируемость. в следующей части,Мы рассмотрим сценарии применения и лучшие практики для обеих платформ.,Предоставим вам практические рекомендации и советы.