نقطے

نقطے Qdrant کے ذریعہ موچرخہ اکائیاں ہیں۔ ایک نقطہ ایک ویکٹر اور ایک اختیاری پیمانے کے ساتھ ریکارڈ ہوتا ہے۔

آپ نقطوں کو ویکٹر مماثلت کے بنیاد پر ایک کلکشن میں گروپ بندی کر سکتے ہیں۔ پروسیس کی تفصیلات کے لیے تلاش اور فلٹر سیکشن میں مزید تفصیلات فراہم کردی گئی ہیں۔

اس سیکشن میں ویکٹر بنانے اور انتظام کرنے کا طریقہ پیش کیا گیا ہے۔

نقطہ پر کسی بھی ترمیم کی آپریشن غیر متزامن ہوتی ہے اور دو مراحل میں تقسیم ہوتی ہے۔ پہلے مرحلے میں ، آپریشن کو رائٹ-آہیڈ لاگ میں لکھا جائے گا۔

اس لمحہ پر ، حتی کہ مشین بجلی کھو دے تو بھی سروس ڈیٹا کو نہیں گئے گا۔

مشورہ: Qdrant میں نقطے ایک انتہائی تصور میں ہیں ، آپ انہیں ایک MySQL ٹیبل میں ڈیٹا کی ایک قطار کے طور پر سمجھ سکتے ہیں۔

نتائج کا انتظار

اگر API &wait=false پیرامیٹر کے ساتھ بلکہ صریح طور پر نہیں مخصوص کیا گیا ہے تو کلائنٹ کو ڈیٹا وصول کرنے کے لئے تصدیق کرنے کا پیغام موصول ہوگا:

{
    "result": {
        "operation_id": 123,
        "status": "acknowledged"
    },
    "status": "ok",
    "time": 0.000206061
}

اس رد بعلی جواب کی یقینی بات نہیں کرتا کہ ڈیٹا فوراً حاصل ہوگا۔ یہ ایک قسم کی قطعی موافقت کا استعمال کرتا ہے۔ کلیکشن کو اپ ڈیٹ کرنے کے عمل کے دوران کچھ وقت لگ سکتا ہے۔ حقیقت میں ، یہ درخواست آخر کار ناکام ہو سکتی ہے۔ اگر بہت سارے ویکٹرز شامل ہیں تو ہم بری حالت میں پوری طرح سے پائپ لائن آپریشنز کا استعمال کرنے کا مشورہ دیتے ہیں۔

اگر آپ کی ایپلیکیشن کی منطقیات فوراً تلاش کی فراہمی کی ضرورت ہو تو ایپ آئی ریسپانس کے بعد ?wait=true flag استعمال کریں۔ اس صورت میں، API صرف اس بعد نتیجہ واپس کرے گا جب آپریشن مکمل ہوجائے گا۔

{
    "result": {
        "operation_id": 0,
        "status": "completed"
    },
    "status": "ok",
    "time": 0.000206061
}

نقطہ شناخت

Qdrant 64 بِٹ غیر منفی عددی سرحد اور یونیورسل یونیک ڈینٹیفائر (UUIDs) کو نقطوں کے شناخت کے طور پر دعوت دے ہے۔

UUID سٹرنگ کی تشہیر کی کچھ مثالیں مندرجہ ذیل ہیں:

  • سادہ تشہیر: 936DA01F9ABD4D9D80C702AF85C822A8
  • Hyphenated representation: 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 میں تمام APIs، ڈیٹا پوائنٹ لوڈنگ کو شناختی بناتے ہیں۔ اس کا مطلب ہے کہ وہ کردار جو بار بار ایک ساتھ کردار گیری کا طریقہ ہوتا ہے، ایک ہی تھرا کے مترادف ہے۔

اس سیناریو میں، یہ یہ مطلب ہوتا ہے کہ جب بھی یکساں آئی ڈی کے ساتھ ڈیٹا پوائنٹس کو دوبارہ اپ لوڈ کیا جائے گا، موجودہ ڈیٹا پوائنٹس اووررائٹ ہوں گے۔

ایڈمپوٹنٹ پراپرٹی، وہ پیغام کیوزز کے لئے مفید ہے جو دقیانوسی پریسائی نہیں فراہم کرتے ہیں۔ اس حالت میں بھی، 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 میں دستیاب ہے

نامزد ویکٹرز اختیاری ہیں۔ ڈیٹا پوائنٹس اپ لوڈ کرتے وقت، کچھ ویکٹرز کو نظرانداز کیا جا سکتا ہے۔ مثال کے طور پر، آپ صرف image ویکٹر کے ساتھ ایک ڈیٹا پوائنٹ اپ لوڈ کرسکتے ہیں اور دوسرے کو صرف text ویکٹر کے ساتھ۔

ایک موجودہ آئی ڈی والے ڈیٹا پوائنٹ کو موڈیفائی کرتے ہوئے، موجودہ ڈیٹا پوائنٹ پہلے حذف کیا جاتا ہے اور پھر اسے مخصوص ویکٹر کے ساتھ دوبارہ داخل کیا جاتا ہے۔ دوسرے الفاظ میں، مکمل ڈیٹا پوائنٹ کی جگہ لی جاتی ہے، اور کسی بھی غیر معین ویکٹرز کو نل کر دیا جاتا ہے۔ اگر آپ موجودہ ویکٹرز کو برقرار رکھنا چاہتے ہیں اور صرف مخصوص ویکٹرز کو اپ ڈیٹ کرنا چاہتے ہیں، تو برائے مہربانی ویکٹرز کو اپ ڈیٹ کرنے کے لئے رجوع کریں۔

ڈیٹا پوائنٹس کی ترتیب دینا

ڈیٹا پوائنٹ کو ترتیب دینے کے لئے، آپ اس کا ویکٹر یا اس کی پیمائش میں ترتیب دے سکتے ہیں۔ اس کے کئی طریقے ہیں جن کا انجام دینا ممکن ہے۔

سمیت سانچہ نوازی کریں

ورژن 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
    ]
}

آپ کو نقطے کی شناخت جاننے کی ضرورت نہیں ہے۔ ایک دوسرا طریقہ یہ ہے کہ آپ فلٹر استعمال کریں۔

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

پیمانہ سیٹ کریں کے مشابہ، آپ کو نقطے کی شناخت جاننے کی ضرورت نہیں ہے۔ ایک دوسرا طریقہ یہ ہے کہ آپ فلٹر استعمال کریں۔

پیمانہ کی چابیوں کو حذف کریں

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 (Schema):

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" } ہوتا ہے۔

نقاط کی تلاش

ان کی شناخت کے لیے ایک طریقہ:

REST API (Schema):

POST /collections/{collection_name}/points

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

اس طریقہ میں اضافی پیرامیٹرز with_vectors اور with_payload ہیں۔ ان پیرامیٹرز کا استعمال کرتے ہوئے، آپ وہ حصے منتخب کر سکتے ہیں جو آپ کو ضرورت ہوتی ہے۔ استثنا کروا کر، بیکار ڈیٹا ٹرانسفر سے بچا جا سکتا ہے۔

API کے ذریعے ایک نقطہ حاصل کرنا بھی ممکن ہے:

REST API (Schema):

GET /collections/{collection_name}/points/{point_id}

اسکرول

کبھی کبھی ضروری ہوتا ہے کہ بغیر ان کی شناخت کئے، سب ذخیرہ شدہ نقاط حاصل کرنا ہو یا فلٹر کرنے والے نقاط پر چرھائی کرنی ہوتی ہے۔

REST API (Schema):

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
}

Scroll API نقاط کو فلٹر کرنے والے تمام نقاط کو صفحہ وار واپس دیتا ہے۔

تمام حاصل شدہ نقاطID کی شناخت کردار سے ترتیب دی جاتی ہیں۔ اگلے صفحہ کو دستیاب کرانے کے لیے، آپ کو offset فیلڈ میں دریافت شدہ زیادہ سے زیادہ ID کا تصریح دینا ہوگا۔ سہولت کے لیے، یہ ID next_page_offset فیلڈ میں بھی واپس دیا گیا ہے۔ اگر next_page_offset فیلڈ کی قیمت null ہو، تو یہ مطلب ہے کہ آخری صفحہ تک پہنچ چکے ہیں۔

نقاط کی تعداد

ورژن v0.8.4 سے دستیاب ہے

کبھی کبھی صرف فلٹر کرنے والے حالات کی تعداد کا علم ہونا ضروری ہوتا ہے بغیر حقیقی تلاش کئے۔

مثال کے طور پر، یہ درست ہو سکتا ہے درج ذیل صورتوں میں:

  • دلائل کی تلاش کیلئے نتیجہ کی سائز کا تخمینہ لگانا
  • صفحوں کی تعداد تعین کرنا
  • کوئیری کی اجراء کی رفتار کا تجربہ کرنا

REST API (Schema):

POST /collections/{collection_name}/points/count

{
    "filter": {
        "must": [
            {
                "key": "color",
                "match": {
                    "value": "red"
                }
            }
        ]
    },
    "exact": true
}

فلٹر کرنے والے حالات کے تمام نقاط کی تعداد واپس دیتا ہے:

{
    "count": 3811
}

بیچ اپ ڈیٹ

v1.5.0 کے بعد دستیاب

آپ متعدد نقطوں پر بیچ عملیات کرسکتے ہیں۔ یہ شامل ہیں نقطے، سمتیے، اور پیمانہ جوڑنا، اپ ڈیٹ، اور حذف کرنا۔

بیچ اپ ڈیٹ درخواست ایک سلسلہ عملوں پر مشتمل ہوتی ہے جو ترتیب سے انجام دی جاتی ہیں۔ عملوں میں شامل ہیں:

  • نقطوں کو جمع یا اپ ڈیٹ کریں: upsert یا UpsertOperation
  • نقطوں کو حذف کریں: delete_points یا DeleteOperation
  • سمتیہ کو اپ ڈیٹ کریں: update_vectors یا UpdateVectorsOperation
  • سمتیہ کو حذف کریں: delete_vectors یا DeleteVectorsOperation
  • پیمانہ تعین کریں: set_payload یا SetPayloadOperation
  • پیمانہ کو پھر سے لکھیں: overwrite_payload یا OverwritePayload
  • پیمانہ کو حذف کریں: delete_payload یا DeletePayloadOperation
  • پیمانہ صاف کریں: clear_payload یا ClearPayloadOperation

ذیل میں دی گئی مثال میں تمام عملوں کا استعمال کیا گیا ہے۔

REST اے پی آئی (Schema):

POST /collections/{collection_name}/points/batch

{
    "operations": [
        {
            "upsert": {
                "points": [
                    {
                        "id": 1,
                        "vector": [1.0, 2.0, 3.0, 4.0],
                        "payload": {}
                    }
                ]
            }
        },
        {
            "update_vectors": {
                "points": [
                    {
                        "id": 1,
                        "vector": [1.0, 2.0, 3.0, 4.0]
                    }
                ]
            }
        },
        {
            "delete_vectors": {
                "points": [1],
                "vector": [""]
            }
        },
        {
            "overwrite_payload": {
                "payload": {
                    "test_payload": "1"
                },
                "points": [1]
            }
        },
        {
            "set_payload": {
                "payload": {
                    "test_payload_2": "2",
                    "test_payload_3": "3"
                },
                "points": [1]
            }
        },
        {
            "delete_payload": {
                "keys": ["test_payload_2"],
                "points": [1]
            }
        },
        {
            "clear_payload": {
                "points": [1]
            }
        },
        {"delete": {"points": [1]}}
    ]
}

ایک ہی قسم کی عمل کے ساتھ بیچ نقطوں کا استعمال کرنے کے لئے، اُس عمل کے اندر ہی بیچ کی خصوصیت کا فائدہ حاصل کریں۔