이 장에서는 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 벡터 데이터베이스의 컬렉션 개념은 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
}
더 자세한 튜토리얼은 아래 장을 참조하십시오.