Изучение Milvus: масштабируемая векторная база данных для поиска по сходству

Milvus.io — официальный сайт Milvus, векторной базы данных, предназначенной для масштабируемого поиска по сходству. Это масштабируемая и невероятно быстрая база данных с открытым исходным кодом, которая специализируется на хранении, индексировании и управлении огромными векторами внедрения, генерируемыми глубокими нейронными сетями и другими моделями машинного обучения. Milvus предлагает простой и интуитивно понятный SDK для различных языков программирования, позволяющий пользователям быстро создавать крупномасштабные сервисы поиска по сходству.

В этой статье блога мы рассмотрим несколько методов работы с Milvus и приведем примеры кода для каждого метода. Давайте погрузимся!

  1. Установка Milvus:
    Для начала вам необходимо установить Milvus в вашей системе. Вы можете скачать автономную версию Milvus, используя следующий код:

    wget https://github.com/milvus-io/milvus/releases/download/v2.3.3/milvus-standalone-docker-compose.yml -O docker-compose.yml

    После загрузки файла запустите Milvus с помощью Docker Compose:

    sudo docker compose up -d
  2. Операции CRUD:
    Milvus предоставляет удобные методы выполнения операций CRUD (создание, чтение, обновление, удаление) над векторными данными. Вот пример того, как вставлять векторы в коллекцию:

    from milvus import Milvus, DataType, IndexType
    # Connect to Milvus server
    milvus = Milvus(host='localhost', port='19530')
    # Create a collection
    collection_name = 'my_collection'
    dimension = 128
    milvus.create_collection(collection_name, {'dimension': dimension, 'index_file_size': 1024, 'metric_type': MetricType.L2})
    # Insert vectors into the collection
    vectors = [[1.0] * dimension, [2.0] * dimension]
    ids = [1, 2]
    milvus.insert(collection_name, vectors, ids)
  3. Векторный поиск:
    Milvus обеспечивает эффективный поиск по сходству на основе векторного сходства. Вот пример выполнения векторного поиска:

    from milvus import Milvus, DataType, IndexType
    # Connect to Milvus server
    milvus = Milvus(host='localhost', port='19530')
    # Load the collection
    collection_name = 'my_collection'
    milvus.load_collection(collection_name)
    # Define the query vector
    query_vector = [1.0] * dimension
    # Perform vector search
    top_k = 10
    results = milvus.search(collection_name, query_vector, top_k)
  4. Фильтрация атрибутов.
    Milvus поддерживает расширенный векторный поиск с фильтрацией атрибутов. Вот пример того, как фильтровать результаты поиска по атрибутам:

    from milvus import Milvus, DataType, IndexType
    # Connect to Milvus server
    milvus = Milvus(host='localhost', port='19530')
    # Load the collection
    collection_name = 'my_collection'
    milvus.load_collection(collection_name)
    # Define the query vector and attribute filter
    query_vector = [1.0] * dimension
    attr_filter = {'age': [30, 40]}
    # Perform vector search with attribute filtering
    top_k = 10
    results = milvus.search(collection_name, query_vector, top_k, params={'anns_field': 'age', 'params': attr_filter})

Это всего лишь несколько примеров методов и функций, предлагаемых Milvus. База данных предоставляет широкий спектр функций, включая поддержку UDF, настраиваемый уровень согласованности, перемещение во времени и многое другое.

Реализуя эти методы и используя возможности Milvus, разработчики могут эффективно управлять крупномасштабными векторными данными и осуществлять поиск для различных приложений машинного обучения.