ข้อมูลพื้นที่เก็บสำคัญ
หนึ่งในคุณสมบัติที่สำคัญของ 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"
}
}
}