Установка Qdrant

Примечание: Этот учебник основан на установке базы данных Qdrant с использованием Docker. Пожалуйста, установите Docker перед продолжением.

Загрузите образ qdrant

docker pull qdrant/qdrant

Запустите сервис векторной базы данных qdrant

docker run -p 6333:6333 \
    -v $(pwd)/qdrant_storage:/qdrant/storage:z \
    qdrant/qdrant

По умолчанию мы отображаем локальный каталог файлов в контейнер, и все данные хранятся в каталоге ./qdrant_storage.

Теперь вы можете получить доступ к Qdrant через localhost:6333.

Векторная база данных Qdrant поддерживает RESTful API для операций с базой данных, а также SDK для языков программирования, таких как Python, Go и т. д. Этот учебник в основном сосредоточен на объяснении использования RESTful API.

Пример доступа к API

curl -X PUT 'http://localhost:6333/collections/test_collection' \
  -H 'Content-Type: application/json' \
  --data-raw '{
    "vectors": {
      "size": 4,
      "distance": "Dot"
    }
  }'

Qdrant Web UI

Получите доступ к веб-интерфейсу через адрес http://localhost:6333/dashboard

Qdrant веб-интерфейс

Создание коллекций

Концепция коллекций в векторной базе данных Qdrant может быть сравнена со структурой таблицы MYSQL, используемой для единообразного хранения данных одного типа векторов. Каждый хранимый в коллекции данных, называемый точками в Qdrant, имеет сходное значение с точками в математическом геометрическом пространстве, представляющее векторное представление в геометрическом пространстве (просто рассматривайте его как кусок данных).

PUT /collections/{collection_name}

{
    "vectors": {
      "size": 300,
      "distance": "Cosine"
    }
}

Пояснение параметров:

Параметр Описание
collection_name Название коллекции (обязательно)
vectors Определение параметров вектора (обязательно)
vectors.size Представляет размер вектора (или размерность вектора)
vectors.distance Представляет алгоритм сходства вектора, в основном включая три алгоритма: "Cosine", "Euclid", "Dot"

Добавление векторов (точек)

После создания коллекции мы можем добавить векторные данные в коллекцию. В Qdrant векторные данные представлены с использованием точек, где каждые данные точки включают три части: идентификатор, нагрузка (связанные данные) и векторные данные.

Пример

PUT /collections/{collection_name}/points

{
    "points": [
        {
            "id": "5c56c793-69f3-4fbf-87e6-c4bf54c28c26", // id
            "payload": {"color": "red"}, // Связанные атрибутные данные, обычно связанные с бизнес-атрибутами, такими как: идентификатор заказа, идентификатор продукта, название и т. д.
            "vector": [0.9, 0.1, 0.1] // Векторные данные, представляющие характеристики текущих бизнес-данных
        }
    ]
}

Поиск векторов

После добавления векторных данных мы можем выполнять поиск семантической схожести с использованием векторов.

Пример

// collection_name - название коллекции
POST /collections/{collection_name}/points/search

{
    "vector": [0.2, 0.1, 0.9, 0.7], // Векторный параметр
    "limit": 3 // Возвращает топ 3 данных с наивысшей схожестью
}

Описание параметров:

  • вектор: Параметр вектора, используемый для поиска контента, схожего с этим вектором. Например: Вы можете преобразовать ключевые слова, которые пользователи должны искать, в векторы, а затем искать содержимое, связанное с вводом пользователя.

Фильтрация атрибутов

При поиске данных помимо выполнения поиска схожести с использованием векторов иногда требуется выполнять фильтрацию атрибутов, аналогичную WHERE-условию в SQL, для фильтрации некоторых атрибутов. Qdrant поддерживает фильтрацию запросов для фильтрации атрибутов, связанных с данными точек.

Пример

// collection_name - название коллекции
POST /collections/{collection_name}/points/search

{
    "filter": { // Это в основном используется для фильтрации атрибутов, связанных с данными, и общий формат синтаксиса подобен синтаксису Elasticsearch. Этот параметр является необязательным.
        "must": [ // Фильтрация данных точек с цветом=красный
            {
                "key": "color",
                "match": {
                    "value": "red"
                }
            }
        ]
    },
    "vector": [0.2, 0.1, 0.9, 0.7], // Параметр вектора
    "limit": 3
}

Для более подробных учебных пособий обратитесь к следующим главам.