이 장에서는 Qdrant 벡터 데이터베이스의 빠른 시작 및 RESTful API를 기반으로 하는 벡터 데이터베이스 작업에 대해 소개합니다.

Qdrant 설치하기

참고: 이 튜토리얼은 Docker를 사용하여 Qdrant 데이터베이스를 설치하는 것을 기반으로 합니다. 계속 진행하기 전에 Docker를 설치하십시오.

Qdrant 이미지 다운로드

docker pull qdrant/qdrant

Qdrant 벡터 데이터베이스 서비스 시작

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

기본적으로 로컬 파일 디렉토리를 컨테이너에 매핑하며, 모든 데이터는 ./qdrant_storage 디렉토리에 저장됩니다.

이제 localhost:6333을 통해 Qdrant에 액세스할 수 있습니다.

Qdrant 벡터 데이터베이스는 데이터베이스 작업을 위한 RESTful API와 Python, Go 등의 프로그래밍 언어용 SDK를 지원합니다. 이 튜토리얼은 주로 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 웹 UI

웹 UI는 http://localhost:6333/dashboard 주소를 통해 액세스할 수 있습니다.

Qdrant web ui

컬렉션 생성

Qdrant 벡터 데이터베이스의 컬렉션 개념은 MYSQL의 테이블 구조에 비교될 수 있으며, 동일한 유형의 벡터 데이터를 균일하게 저장하는 데 사용됩니다. 컬렉션에 저장된 각 데이터는 Qdrant에서 포인트로 참조되며, 수학적 기하학 공간에서의 포인트와 유사한 개념을 가지고 있으며, 벡터의 표현을 나타냅니다 (단순히 데이터 조각으로 취급합니다).

PUT /collections/{collection_name}

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

매개변수 설명:

매개변수 설명
collection_name 컬렉션 이름 (필수)
vectors 벡터 매개변수 정의 (필수)
vectors.size 벡터 크기 (또는 벡터의 차원)를 나타냄
vectors.distance 주로 "Cosine," "Euclid," "Dot" 등 3 가지 알고리즘 중 하나를 포함한 벡터 유사성 알고리즘을 나타냄

벡터 추가 (포인트)

컬렉션을 생성한 후에는 컬렉션에 벡터 데이터를 추가할 수 있습니다. Qdrant에서 벡터 데이터는 포인트를 사용하여 표현되며, 각 포인트 데이터는 id, 페이로드 (연관 데이터) 및 벡터 데이터 세 가지 부분으로 구성됩니다.

예시

PUT /collections/{collection_name}/points

{
    "points": [
        {
            "id": "5c56c793-69f3-4fbf-87e6-c4bf54c28c26", // id
            "payload": {"color": "red"}, // 연관 속성 데이터, 일반적으로 관련 비즈니스 속성입니다. 예: 주문 ID, 제품 ID, 제목 등
            "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개 데이터 반환
}

매개변수 설명:

  • vector: 해당 벡터와 유사한 내용을 검색하는 데 사용되는 벡터 매개변수입니다. 예: 사용자가 검색해야 하는 키워드를 벡터로 변환한 다음 사용자 입력과 관련된 콘텐츠를 검색할 수 있습니다.

속성 필터링

데이터를 검색할 때 벡터를 사용한 유사성 검색뿐만 아니라 일부 속성을 필터링하는 것이 필요한 경우가 있습니다. 때때로 SQL의 WHERE 절과 유사한 속성 필터링을 실행하고 싶을 수 있습니다. Qdrant는 포인트 페이로드와 관련된 속성에 대한 필터 쿼리를 지원합니다.

예시

// collection_name - 컬렉션 이름
POST /collections/{collection_name}/points/search

{
    "filter": { // 이는 주로 페이로드의 관련 속성을 필터링하는 데 사용되며, 전반적인 구문 형식은 Elasticsearch 구문과 유사합니다. 이 매개 변수는 선택 사항입니다.
        "must": [ // color=red인 포인트 데이터 필터링
            {
                "key": "color",
                "match": {
                    "value": "red"
                }
            }
        ]
    },
    "vector": [0.2, 0.1, 0.9, 0.7], // 벡터 매개 변수
    "limit": 3
}

더 자세한 튜토리얼은 아래 장을 참조하십시오.