ข้อมูลพื้นที่เก็บสำคัญ

หนึ่งในคุณสมบัติที่สำคัญของ Qdrant คือความสามารถในการเก็บข้อมูลเพิ่มเติมนอกเวกเตอร์ (การจัดการพื้นที่เก็บชื่อเธรฺดiemธ์). ในผลพูนศัพท์ของ Qdrant ข้อมูลเพิ่มเติมนี้ถูกอ้างถึงว่า "ข้อมูลเพิ่มเติม" (payload)。

Qdrant ช่วยให้คุณสามารถเก็บข้อมูลใดก็ได้ที่สามารถแสดงได้ด้วย JSON。

นี่คือตัวอย่างของ payload ที่ทั่วไป:

{
    "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
        }
    ]
}

ประเภทของ Payload

นอกจากการเก็บ payload แล้ว Qdrant ยังอนุญาตให้คุณค้นหาโดยใช้ค่าต่าง ๆ ได้เช่นกัน. ความสามารถนี้ถูกนำเสนอในรูปแบบตัวกรองเพิ่มเติมในช่วงการค้นหาและอนุญาตให้คุณซ้อนรวมตรรกะทางความหมายบนสุดของความคล้ายคลึง.

ระหว่างกระบวนการกรอง Qdrant จะตรวจสอบเงื่อนไขของค่าที่ตรงตามเกณฑ์กรอง. ถ้าชนิดของค่าที่เก็บไว้ไม่ตรงตามเกณฑ์กรอง จะถือว่าไร้ความพอใจ.

ตัวอย่างเช่น การใช้เงื่อนไขช่วงกับข้อมูลสตริง จะทำให้ได้ผลลัพธ์เปล่า

อย่างไรก็ตามการจัดการข้อมูลแบบลูว์ (ค่าที่มีชนิดเดียวกันหลายค่า) มีความแตกต่างเล็กน้อย. เมื่อเราปรับใช้ตัวกรองกับอาเรย์ หากมีอย่างน้อยหนึ่งค่าในอาเรย์ที่ตรงตามเงื่อนไข ตัวกรองก็จะสำเร็จ

การอภิปรายอย่างละเอียดเกี่ยวกับกระบวนการกรองถูกดำเนินการในส่วนการกรอง

มาดูที่รูปแบบของข้อมูลที่ Qdrant รองรับ:

จำนวนเต็ม

integer - จำนวนเต็ม 64 บิต ครอบคลุมตั้งแต่ -9223372036854775808 ถึง 9223372036854775807.

ตัวอย่างของค่า integer เดี่ยวและค่า integer หลายค่า:

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

ทศนิยม

float - จำนวนทศนิยม 64 บิต

ตัวอย่างของค่า float เดี่ยวและค่า float หลายค่า:

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

ตรรกะ

bool - ค่าทวิถวิ ที่เท่ากับ true หรือ false

ตัวอย่างของค่า bool เดี่ยวและค่า bool หลายค่า:

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

คำหลัก

keyword - ค่าสตริง

ตัวอย่างของค่า keyword เดี่ยวและค่า keyword หลายค่า:

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

พิกัดภูมิศาสตร์

geo ใช้เพื่อแสดงพิกัดภูมิศาสตร์

ตัวอย่างของค่า geo เดี่ยวและค่า geo หลายค่า:

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

พิกัดควรถูกอภิปรายเป็นอ็อบเจ็กที่มีฟิลด์สองอัน: longitude - แทนลองจิจูด, latitude - แทนละติจูด

สร้างจุดพร้อม payload

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]}
        }
    ]
}

กำหนด payloads

REST API (Schema):

POST /collections/{collection_name}/points/payload

{
    "payload": {
        "property1": "string",
        "property2": "string"
    },
    "points": [
        0, 3, 100
    ]
}

ลบ payloads

วิธีนี้จะลบ keys ที่ระบุออกจากจุดที่ระบุ

REST API (Schema):

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

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

ล้าง payloads

วิธีนี้จะลบสิ่งที่กำหนดทั้งหมดออกจากจุดที่ระบุ

REST API (Schema):

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

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

คุณยังสามารถใช้ models.FilterSelector เพื่อลบจุดที่ตรงกับเงื่อนไขที่ระบุแทนที่จะใช้ IDs.

การสร้างการจัดส่งข้อมูล

เพื่อทำการค้นหาโดยมีการกรองอย่างมีประสิทธิภาพ Qdrant ช่วยให้คุณสามารถสร้างดัชนีสำหรับฟิลด์ข้อมูลโดยการระบุชื่อและประเภทของฟิลด์

ฟิลด์ที่ถูกทำดัชนีมีผลต่อดัชนีเวกเตอร์ด้วย

ในการใช้งานจริง แนะนำให้สร้างดัชนีบนฟิลด์ที่มีความเป็นไปได้ที่จะ จำกัดผลลัพธ์มากที่สุด ตัวอย่างเช่นการทำดัชนีบน ID ของวัตถุจะมีประสิทธิภาพมากกว่าการทำดัชนีบนสี เนื่องจาก ID ของวัตถุมีค่าที่แตกต่างกันสำหรับแต่ละบันทึก ในขณะที่สีมีค่าเพียงไม่กี่ค่าเท่านั้น

ในการค้นหาที่ประกอบด้วยหลายฟิลด์ Qdrant จะพยายามใช้ดัชนีที่จำกัดผลสำหรับตัวแรก

เพื่อสร้างดัชนีสำหรับฟิลด์ สามารถใช้ได้ตามนี้:

REST API (Schema)

PUT /collections/{collection_name}/index

{
    "field_name": "ชื่อของฟิลด์ที่จะทำดัชนี",
    "field_schema": "keyword"
}

ฟิลด์ที่ทำดัชนีแสดงในสกีมาของการจัดส่งข้อมูลพร้อมกับ collection info API.

ตัวอย่างสกีมาของการจัดส่งข้อมูล:

{
    "payload_schema": {
        "property1": {
            "data_type": "keyword"
        },
        "property2": {
            "data_type": "integer"
        }
    }
}