बिंदु
बिंदु Qdrant द्वारा प्रबंधित प्रमुख एकाइयाँ हैं। एक बिंदु एक वेक्टर और एक वैकल्पिक payload से बना एक रिकॉर्ड होता है।
आप वेक्टर समानता पर आधारित समूहों में बिंदुओं की खोज कर सकते हैं। प्रक्रिया का अधिक विस्तृत वर्णन 'खोज और फ़िल्टर' अनुभाग में दिया गया है।
इस अनुभाग में वेक्टरों को कैसे बनाया और प्रबंधित किया जाए, इसका परिचय दिया गया है।
किसी भी बिंदु पर संशोधन कार्य असिंक्रोनस होता है और दो चरणों में विभाजित होता है। पहले चरण में, ऑपरेशन राइट-अहेड लॉग में लिखा जाएगा।
इस समय, यदि मशीन का पावर गुम हो जाता है, तो सेवा डेटा खोने का समान नहीं होगी।
सुझाव: बिंदु Qdrant में एक अमूर्त अवधारणा है, आप उन्हें एक MySQL तालिका में डेटा की एक पंक्ति के रूप में सोच सकते हैं।
परिणाम की प्रतीक्षा कर रहा है
यदि API को &wait=false
पैरामीटर के साथ या स्पष्ट रूप से निर्दिष्ट नहीं किया जाता है, तो ग्राहक डेटा प्राप्ति के लिए पुष्टि संदेश प्राप्त करेगा:
{
"result": {
"operation_id": 123,
"status": "acknowledged"
},
"status": "ok",
"time": 0.000206061
}
यह प्रतिक्रिया डेटा के तत्काल प्राप्ति की गारंटी नहीं देती है। यह एक प्रकार की संभावित संरचना का उपयोग करती है। संग्रह को अपडेट करने की वास्तविक प्रक्रिया के दौरान कुछ समय लग सकता है। वास्तव में, यह अनुरूप हो सकता है कि यह अनुरूपता किसी समय किसी कामयाबता के साथ अंतत: विफल हो जाए। बहुत से वेक्टर्स को डालने के लिए हम असिंक्रोनस अनुरोधों का पूरी तरह से उपयोग करने की सलाह देते हैं।
यदि आपके अनुप्रयोगिक लॉजिक को API प्रतिक्रिया के बाद खोज के लिए तत्काल उपलब्धता चाहिए, तो ?wait=true
ध्वज का उपयोग करें। इस मामले में, API केवल तभी परिणाम लौटाएगा जब ऑपरेशन पूरा हो जाएगा:
{
"result": {
"operation_id": 0,
"status": "completed"
},
"status": "ok",
"time": 0.000206061
}
बिंदु आईडी
Qdrant बिंदुओं के पहचानकर्ता के रूप में 64-बिट तार रहित पूर्णांक
और UUIDs
का समर्थन करता है।
UUID स्ट्रिंग प्रतिनिधियों के उदाहरण निम्नलिखित हैं:
- सरल प्रतिनिधित रूप:
936DA01F9ABD4d9d80C702AF85C822A8
- हाइफेनाटिड प्रतिनिधित रूप:
550e8400-e29b-41d4-a716-446655440000
- URN:
urn:uuid:F9168C5E-CEB2-4faa-B6BF-329BF39FA1E4
इसका अर्थ है कि प्रत्येक अनुरोध में, संख्यात्मक आईडी की बजाय UUID स्ट्रिंग का उपयोग किया जा सकता है। उदाहरण के लिए:
PUT /collections/{collection_name}/points
{
"points": [
{
"id": "5c56c793-69f3-4fbf-87e6-c4bf54c28c26",
"payload": {"color": "red"},
"vector": [0.9, 0.1, 0.1]
}
]
}
और
PUT /collections/{collection_name}/points
{
"points": [
{
"id": 1,
"payload": {"color": "red"},
"vector": [0.9, 0.1, 0.1]
}
]
}
दोनों मान्य हैं।
डेटा बिंदुओं को अपलोड करना
प्रदर्शन को अनुकूलित करने के लिए, Qdrant डेटा बिंदुओं का बैच अपलोड करने का समर्थन करता है। इसका मतलब है कि आप एक ही API कॉल में सेवा में कई डेटा बिंदुओं को लोड कर सकते हैं। बैच अपलोड नेटवर्क कनेक्शन के ओवरहेड को काफी कम कर सकता है।
Qdrant API दो बैच बनाने के मेथड का समर्थन करता है - रिकॉर्ड-अनुसार और स्तंभ-अनुसार। आंतरिक रूप से, ये विकल्प अपेक्षा में सुविधाजनक हैं और सिर्फ आंतरिक क्रियान्वयन के लिए हैं।
REST API का उपयोग करके डेटा बिंदुओं को बनाना:
PUT /collections/{collection_name}/points
{
"batch": {
"ids": [1, 2, 3],
"payloads": [
{"color": "red"},
{"color": "green"},
{"color": "blue"}
],
"vectors": [
[0.9, 0.1, 0.1],
[0.1, 0.9, 0.1],
[0.1, 0.1, 0.9]
]
}
}
या रिकॉर्ड-अनुसार दृष्टिकोण का समर्थन करने वाला समान मेथड प्रयोग करें:
PUT /collections/{collection_name}/points
{
"points": [
{
"id": 1,
"payload": {"color": "red"},
"vector": [0.9, 0.1, 0.1]
},
{
"id": 2,
"payload": {"color": "green"},
"vector": [0.1, 0.9, 0.1]
},
{
"id": 3,
"payload": {"color": "blue"},
"vector": [0.1, 0.1, 0.9]
}
]
}
Qdrant में सभी API, उनमें डेटा बिंदु लोड करने, आईडेंटियम्पोटेंट हैं। इसका मतलब है कि पूर्वनिर्धारित विधि को दोहराना करना एकल संचालन के समान है।
इस स्थिति में, इसका मतलब है कि जब एकसमान आईडी वाले डेटा बिंदुओं को फिर से अपलोड किया जाए, मौजूदा डेटा बिंदु अधिग्रहण किया जाएगा।
आईडेंटियम्पोटेंट गुणवत्ता, यहां तक कि उदाहरण के लिए मैसेज कतारें का उपयोग करने के लिए उपयोगी है, जो सटीक एक-बार की गारंटी नहीं प्रदान करती है। इस मामले में भी, Qdrant डाटा संगतता को सुनिश्चित करता है।
v0.10.0 से उपलब्ध
यदि बनाई जा रही कलेक्शन में एक से अधिक वेक्टर हैं, तो आप नाम सहित प्रत्येक वेक्टर के लिए डेटा प्रदान कर सकते हैं:
PUT /collections/{collection_name}/points
{
"points": [
{
"id": 1,
"vector": {
"image": [0.9, 0.1, 0.1, 0.2],
"text": [0.4, 0.7, 0.1, 0.8, 0.1, 0.1, 0.9, 0.2]
}
},
{
"id": 2,
"vector": {
"image": [0.2, 0.1, 0.3, 0.9],
"text": [0.5, 0.2, 0.7, 0.4, 0.7, 0.2, 0.3, 0.9]
}
}
]
}
v1.2.0 से उपलब्ध
नेम्ड वेक्टर वैकल्पिक हैं। डेटा बिंदुओं को अपलोड करते समय, कुछ वेक्टर छोड़े जा सकते हैं। उदाहरण के लिए, आप केवल 'इमेज' वेक्टर के साथ एक डेटा बिंदु अपलोड कर सकते हैं और दूसरे केवल 'पाठ' वेक्टर के साथ।
मौजूदा आईडी के साथ डेटा बिंदु को संशोधित करते समय, मौजूदा डेटा बिंदु को पहले हटा दिया जाता है और फिर उसे निर्दिष्ट वेक्टर के साथ फिर से सेट किया जाता है। अन्य शब्दों में, पूरा डेटा बिंदु बदल दिया जाएगा, और किसी भी अनिर्दिष्ट वेक्टर को नल के रूप में सेट किया जाएगा। यदि आप मौजूदा वेक्टर को अपरिवर्तित रखना चाहते हैं और केवल निर्दिष्ट वेक्टर को अपडेट करना चाहते हैं, तो कृपया वेक्टरों को अपडेट करने का संदर्भ देखें।
डेटा बिंदुओं को संशोधित करना
डेटा बिंदु को संशोधित करने के लिए, आप इसका वेक्टर या पैयलोड संशोधित कर सकते हैं। इसके कई तरीके हैं जिनसे यह संभव है।
वेक्टर्स को अपडेट करें
संस्करण v1.2.0 से उपलब्ध
इस विधि से निर्दिष्ट बिंदुओं पर दिए गए वेक्टर्स को अपडेट किया जाता है। अनिर्दिष्ट वेक्टर्स अपरिवर्तित रहेंगे। सभी दिए गए बिंदु होना चाहिए।
REST API (स्कीमा):
PUT /collections/{collection_name}/points/vectors
{
"points": [
{
"id": 1,
"vector": {
"image": [0.1, 0.2, 0.3, 0.4]
}
},
{
"id": 2,
"vector": {
"text": [0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2]
}
}
]
}
बिंदुओं को अपडेट करने और सभी वेक्टर्स को बदलने के लिए, कृपया अपलोड पॉइंट ऑपरेशन का संदर्भ दें।
वेक्टर्स को हटाएँ
संस्करण v1.2.0 से उपलब्ध
इस विधि से केवल निर्दिष्ट बिंदुओं से दिए गए वेक्टर्स को हटाया जाता है। अन्य वेक्टर्स अपरिवर्तित रहेंगे। बिंदु हटाए नहीं जाएँगे।
REST API (स्कीमा):
POST /collections/{collection_name}/points/vectors/delete
{
"points": [0, 3, 100],
"vectors": ["text", "image"]
}
पेलोड सेट करें
बिंदुओं पर दिए गए पेलोड मूल्यों को सेट करें।
REST API (स्कीमा):
POST /collections/{collection_name}/points/payload
{
"payload": {
"property1": "string",
"property2": "string"
},
"points": [
0, 3, 100
]
}
आपको बिंदु का ID जानने की आवश्यकता नहीं है। एक अन्य तरीका है फ़िल्टर का उपयोग करना।
POST /collections/{collection_name}/points/payload
{
"payload": {
"property1": "string",
"property2": "string"
},
"filter": {
"must": [
{
"key": "color",
"match": {
"value": "red"
}
}
]
}
}
पेलोड को अधिलेखित करें
दिए गए पेलोड को पूरी तरह से दिए गए पेलोड के साथ बदल दें।
REST API (स्कीमा):
PUT /collections/{collection_name}/points/payload
{
"payload": {
"property1": "string",
"property2": "string"
},
"points": [
0, 3, 100
]
}
पेलोड सेट करें के समान, आपको बिंदु का ID जानने की आवश्यकता नहीं है। एक अन्य तरीका है फ़िल्टर का उपयोग करना।
पेलोड कुंजियां हटाएँ
REST API (स्कीमा):
POST /collections/{collection_name}/points/payload/delete
{
"keys": ["color", "price"],
"points": [0, 3, 100]
}
वैकल्पिक रूप से, आप फ़िल्टर का उपयोग करके बिंदुओं से पेलोड कुंजियों को हटाने का उपयोग कर सकते हैं।
POST /collections/{collection_name}/points/payload/delete
{
"keys": ["color", "price"],
"filter": {
"must": [
{
"key": "color",
"match": {
"value": "red"
}
}
]
}
}
पेलोड साफ़ करें
इस विधि से निर्दिष्ट बिंदुओं से सभी पेलोड कुंजियाँ हटा दी जाती हैं।
REST API (स्कीमा):
POST /collections/{collection_name}/points/payload/clear
{
"points": [0, 3, 100]
}
बिंदुओं को हटाएँ
REST API (विषयसूची):
POST /collections/{collection_name}/points/delete
{
"points": [0, 3, 100]
}
बिंदुओं को हटाने के लिए एक और तरीका फ़िल्टर का उपयोग करके किया जा सकता है:
POST /collections/{collection_name}/points/delete
{
"filter": {
"must": [
{
"key": "color",
"match": {
"value": "red"
}
}
]
}
}
इस उदाहरण में इस फ़िल्टर के साथ { "color": "red" }
सभी बिंदुओं को हटा देता है।
बिंदु प्राप्त करें
उनके ID के द्वारा बिंदु प्राप्त करने का विधान:
REST API (विषयसूची):
POST /collections/{collection_name}/points
{
"ids": [0, 3, 100]
}
इस विधि में अतिरिक्त पैरामीटर with_vectors
और with_payload
होते हैं। इन पैरामीटरों का उपयोग करके, आप वह भाग चुन सकते हैं जो बिंदु परिणामों की आपको आवश्यकता होती है। अपरिचित डेटा पर डेटा स्थानांतरण को व्यर्थ न होने देने के लिए बाहर करना मदद करता है।
API के माध्यम से एक ही बिंदु प्राप्त करना भी संभव है:
REST API (विषयसूची):
GET /collections/{collection_name}/points/{point_id}
स्क्रॉल
कभी-कभी सभी संग्रहित बिंदुओं को प्राप्त करना आवश्यक होता है बिना उनके आईडी पता हो या फिल्टरिंग शर्तों को पूरा करते हुए बिंदुओं के माध्यम से यात्रा करना।
REST API (विषयसूची):
POST /collections/{collection_name}/points/scroll
{
"filter": {
"must": [
{
"key": "color",
"match": {
"value": "red"
}
}
]
},
"limit": 1,
"with_payload": true,
"with_vector": false
}
color
=red
से मेल खाते सभी बिंदुओं को लौटाता है:
{
"result": {
"next_page_offset": 1,
"points": [
{
"id": 0,
"payload": {
"color": "red"
}
}
]
},
"status": "ok",
"time": 0.0001
}
स्क्रॉल API संग्रहीत फ़िल्टर करने वाले सभी बिंदुओं को पृष्ठवर्ती ढंग से लौटाएगा।
सभी परिणाम से ID
के साथ भी सारणीबद्ध होते हैं। अगले पृष्ठ कि पूछताछ के लिए, आपको offset
फ़ील्ड में प्राप्त की गई अधिकतम पाए गए ID
को निर्दिष्ट करना होगा। सुविधा के लिए, इस आईडी को भी next_page_offset
फ़ील्ड में लौटाया जाता है। अगर next_page_offset
फ़ील्ड का मान null
है, तो इसका अर्थ है कि आखिरी पृष्ठ पर पहुँच गई है।
बिंदुओं की गिनती
संस्करण v0.8.4 से उपलब्ध
कभी-कभी, यह उपयोगी होता है कि केवल यह पता चले कि फ़िल्टरिंग शर्तों को मानते हुए कितने बिंदु मेलते हैं बिना वास्तविक खोज किए।
उदाहरण के लिए, यह निम्नलिखित परिस्थितियों में उपयोगी हो सकता है:
- फेसटेड खोज के लिए परिणाम आकार का अनुमान लगाना
- पृष्ठ वर्गीकरण के लिए पृष्ठों की संख्या निर्धारण करना
- क्वेरी के निष्पादन की गति की डिबगिंग
REST API (विषयसूची):
POST /collections/{collection_name}/points/count
{
"filter": {
"must": [
{
"key": "color",
"match": {
"value": "red"
}
}
]
},
"exact": true
}
दी गई फ़िल्टरिंग शर्तों को मानने वाले बिंदुओं की गिनती लौटाता है:
{
"count": 3811
}
बैच अपडेट
v1.5.0 से उपलब्ध
आप बहुत से बिंदुओं पर बैच ऑपरेशन कर सकते हैं। इसमें बिंदुओं, वेक्टर्स और पेलोड को इन्सर्ट, अपडेट और डिलीट करना शामिल है।
एक बैच अपड