페이로드

Qdrant의 중요한 기능 중 하나는 벡터 외의 추가 정보를 저장하는 능력(저장 관리 비즈니스 속성)입니다. Qdrant 용어에서 이 추가 정보를 "페이로드"라고 합니다.

Qdrant는 JSON을 사용하여 나타낼 수 있는 모든 정보를 저장할 수 있습니다.

전형적인 페이로드 예시는 다음과 같습니다:

{
    "name": "jacket",
    "color": ["red", "blue"],
    "quantity": 10,
    "price": 11.99,
    "location": [
        {
            "longitude": 52.5200,
            "latitude": 13.4050
        }
    ],
    "reviews": [
        {
            "user": "Alice",
            "score": 4
        },
        {
            "user": "Bob",
            "score": 5
        }
    ]
}

페이로드 유형

페이로드를 저장하는 것 외에도 Qdrant는 특정 유형의 값 기반으로 검색할 수 있는 기능을 제공합니다. 이 기능은 검색 프로세스 중에 추가 필터로 구현되어 있으며 의미론적 유사성 위에 사용자 정의 논리를 삽입할 수 있습니다.

필터링 프로세스 중에 Qdrant는 필터 기준을 충족하는 값의 조건을 확인합니다. 저장된 값 유형이 필터 기준을 충족하지 못하면 불만족스러운 것으로 간주됩니다.

예를 들어 문자열 데이터에 범위 조건을 적용하면 빈 출력이 될 것입니다.

그러나 배열(동일한 유형의 여러 값)의 처리는 약간 다릅니다. 배열에 필터를 적용할 때, 배열의 최소한 하나의 값이 조건을 충족하면 필터가 성공합니다.

필터링 프로세스의 상세한 논의는 필터링 섹션에서 이루어집니다.

Qdrant에서 지원되는 데이터 유형을 살펴보겠습니다:

정수

integer - -9223372036854775808에서 9223372036854775807까지의 64비트 정수.

단일 및 다중 integer 값의 예시:

{
    "quantity": 10,
    "sizes": [35, 36, 38]
}

부동 소수점

float - 64비트 부동 소수점 수.

단일 및 다중 float 값의 예시:

{
    "price": 11.99,
    "rating": [9.1, 9.2, 9.4]
}

부울

bool - 이진 값. true 또는 false와 같음.

단일 및 다중 bool 값의 예시:

{
    "delivered": true,
    "replies": [false, false, true, false]
}

키워드

keyword - 문자열 값.

단일 및 다중 keyword 값의 예시:

{
    "name": "Alice",
    "friends": [
        "Bob",
        "Eva",
        "Jack"
    ]
}

지리적 좌표

geo는 지리적 좌표를 나타내는 데 사용됩니다.

단일 및 다중 geo 값의 예시:

{
    "location": {
        "longitude": 52.5200,
        "latitude": 13.4050
    },
    "cities": [
        {
            "longitude": 51.5072,
            "latitude": 0.1276
        },
        {
            "longitude": 40.7128,
            "latitude": 74.0060
        }
    ]
}

좌표는 경도를 나타내는 longitude 및 위도를 나타내는 latitude 두 필드를 포함하는 객체로 설명되어야 합니다.

페이로드로 포인트 생성

REST API (아키텍처)

PUT /collections/{collection_name}/points

{
    "points": [
        {
            "id": 1,
            "vector": [0.05, 0.61, 0.76, 0.74],
            "payload": {"city": "Berlin", "price": 1.99}
        },
        {
            "id": 2,
            "vector": [0.19, 0.81, 0.75, 0.11],
            "payload": {"city": ["Berlin", "London"], "price": 1.99}
        },
        {
            "id": 3,
            "vector": [0.36, 0.55, 0.47, 0.94],
            "payload": {"city": ["Berlin", "Moscow"], "price": [1.99, 2.99]}
        }
    ]
}

페이로드 설정

REST API (스키마):

POST /collections/{collection_name}/points/payload

{
    "payload": {
        "property1": "문자열",
        "property2": "문자열"
    },
    "points": [
        0, 3, 100
    ]
}

페이로드 삭제

이 방법은 지정된 페이로드 키를 지정된 포인트에서 제거합니다.

REST API (스키마):

POST /collections/{collection_name}/points/payload/delete

{
    "keys": ["color", "price"],
    "points": [0, 3, 100]
}

페이로드 클리어

이 방법은 지정된 포인트에서 모든 페이로드 키를 제거합니다.

REST API (스키마):

POST /collections/{collection_name}/points/payload/clear

{
    "points": [0, 3, 100]
}

또한 지정된 필터 조건과 일치하는 포인트를 제거할 때 models.FilterSelector를 사용할 수 있습니다. 이 때, ID를 제공하는 대신에 사용합니다.

페이로드 색인화

필터링된 검색을 효율적으로 수행하기 위해 Qdrant는 필드의 이름과 유형을 지정하여 페이로드 필드에 대한 색인을 만들 수 있도록 합니다.

색인화된 필드는 벡터 색인에도 영향을 미칩니다.

실제로, 결과를 가장 많이 제한할 것으로 예상되는 필드에 대해 인덱스를 생성하는 것이 권장됩니다. 예를 들어 물체 ID에 대한 인덱싱이 물체의 색상에 대한 인덱싱보다 효율적일 것이며, 물체 ID는 각 레코드마다 고유하지만 색상은 가능한 값이 몇 개뿐입니다.

여러 필드를 사용하는 복합 쿼리의 경우, Qdrant는 가장 제한적인 인덱스를 먼저 사용하려고 시도합니다.

필드에 대한 인덱스를 생성하려면 다음을 사용할 수 있습니다:

REST API (스키마)

PUT /collections/{collection_name}/index

{
    "field_name": "색인을 생성할 필드 이름",
    "field_schema": "키워드"
}

색인화된 필드는 컬렉션 정보 API와 함께 페이로드 스키마에 표시됩니다.

예시 페이로드 스키마:

{
    "payload_schema": {
        "property1": {
            "data_type": "키워드"
        },
        "property2": {
            "data_type": "정수"
        }
    }
}