انڈیکس

Qdrant کی ایک اہم خصوصیت یہ ہے کہ یہ ویکٹر انڈیکس اور روایتی انڈیکس کو ایک موثر طریقے سے ملا کر استعمال کرتا ہے۔ یہ بہت اہم ہے کیونکہ صرف ویکٹر انڈیکس ہونا بہترین ویکٹر تلاش کو فعال کرنے کے لئے کافی نہیں ہے۔ سادہ الفاظ میں ویکٹر انڈیکس ویکٹر تلاش کو تیز کرتا ہے، جبکہ پیمانے والا انڈیکس فلٹرنگ کو تیز کرتا ہے۔

پیراگراف کے انڈیکس کا ایک الگ ہونا موجود ہوتا ہے، لیکن انڈیکس خود کی پیرامیٹر کو پورے سیٹ کے لئے ترتیب دی جاتی ہے۔

تمام پیراگراف خود بخود انڈیکس نہیں رکھتے۔ یہ ترتیبات کی بھرپور کی ضرورتوں پر مبنی ہوتا ہے اور عام طور پر محفوظ نقطوں کی تعداد پر مبنی ہوتا ہے۔

پیمانے والا انڈیکس

Qdrant میں پیمانے والا انڈیکس روایتی دستاویز-منحوص ڈیٹا بیس کے انڈیکس کی طرح ہے۔ یہ انڈیکس مخصوص فیلڈ اور اقسام کے لئے تشکیل دیا جاتا ہے، تاکہ متوافق فلٹر شرائط پر بنیاد پر فوری طور پر نقطوں کو حاصل کیا جا سکے۔

یہ بھی اس میں استعمال ہوتا ہے کہ فلٹر کرنے والے شرائط کی کارڈنیلٹی کی تخمین کرنے کے لئے، جو سوال براہ راست منصوبہ بنانے والے کو تلاش کے منصوبہ کو منتخب کرنے میں مدد فراہم کرتا ہے۔

انڈیکس تشکیل کرنے کے لئے اضافی حسابی وسائل اور یاداشت کی ضرورت ہوتی ہے، لہذا اہم ہے کہ انڈیکس شدہ فیلڈز کو دھیان سے چننا ہے۔ Qdrant اس فیصلہ کو آپ کی طرف منتقل نہیں کرتا، بلکہ یہ صارف کو دینا ہوتا ہے۔

ایک فیلڈ کو انڈیکس شدہ طور پر نشان لگانے کے لئے، مندرجہ ذیل ترکیب کا استعمال کیا جا سکتا ہے:

PUT /collections/{collection_name}/index

{
    "field_name": "انڈیکس شدہ فیلڈ کا نام",
    "field_schema": "کلیدیت"
}

دستیاب فیلڈ قسمیں ہیں:

  • کلیدیت - کلیدیت پیمانے، مطابقتی فلٹر شرائط برتانے والے پیمانے.
  • اعدادی - مطابقتی اور حد پیمانے شرائط برتانے والے پیمانے کے لئے اعدادی پیمانہ۔
  • فلوٹ - حد پیمانے شرائط برتانے والے فلوٹ پیمانہ۔
  • بول - مطابقتی فلٹر شرائط برتانے والے بولی پیمانہ (صرف ورژن 1.4.0 سے دستیاب ہے)۔
  • جغرافیائی - جغرافیائی پیمانے، جغرافیائی باؤکس اور جغرافیائی رےڈیئس فلٹر شرائط برتانے والے پیمانہ۔
  • مضمون - آخری انڈیکس قسم جو کلیدیت/سٹرنگ پیمانہ کے لئے مناسب ہے، مطابقتی مکمل متن تلاش فلٹر شرائط کے لئے ہوتا ہے۔

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

مکمل متن انڈیکس

ویکشن 0.10.0 سے دستیاب ہے

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

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

ایک مکمل متن انڈیکس تشکیل کرنے کے لئے، اوپر دی گئی ترکیب کا استعمال کیا جا سکتا ہے:

PUT /collections/{collection_name}/index

{
    "field_name": "انڈیکس شدہ فیلڈ کا نام",
    "field_schema": {
        "type": "text",
        "tokenizer": "word",
        "min_token_len": 2,
        "max_token_len": 20,
        "lowercase": true
    }
}

دستیاب توکنائزیشن میتھڈز یہ ہیں:

  • word - عبارت کو خالی جگہ، علامت کار، اور خصوصی علامتوں کے بنیاد پر الگ کرتا ہے۔
  • whitespace - عبارت کو خالی جگہوں پر الگ کرتا ہے۔
  • prefix - عبارت کو خالی جگہ، علامت کار، اور خصوصی علامتوں کے بنیاد پر الگ کرتا ہے، پھر ہر لفظ کے لئے ایک پریفکس انڈیکس تشکیل کرتا ہے۔ مثال کے طور پر، hello کو h, he, hel, hell, hello میں انڈیکس کیا جائے گا۔
  • متعدد زبانیں - charabia پیکیج پر مبنی ایک خصوصی طرح کی توکنائزیشن۔ یہ متعدد زبانوں کے صحیح توکنائزیشن اور لیماٹائزیشن کو ممکن بناتا ہے، جس میں غیر لاطینی الف بیت اور غیر خالی جگہ سینٹرز شامل ہیں۔ charabia ڈاکیومینٹیشن پر سپورٹ کی جانے والی زبانوں اور معمولی بنانے کے اختیارات کی مکمل فہرست کے لئے دیکھیں۔ ڈیفالٹ بلڈ ترتیب میں، qdrant میں تمام زبانوں کی سپورٹ ضروری نہیں کیا گیا ہے کیونکہ یہ بائنری فائلوں کی سائز بڑھاتا۔ چینی، جاپانی، اور کورین زبانیں ڈیفالٹ طور پر فعال نہیں ہیں، لیکن ان کو qdrant کو سورس کوڈ استعمال کر کے --features multiling-chinese, multiling-japanese, multiling-korean فلیگس کو استعمال کر کے فعال کیا جا سکتا ہے۔

براہ کرم کوئی سوال یا مطلب طلب ہو تو براہ کرم مکمل متن موافقتی مثالات کے لئے رجحان برطرف کریں۔

بیکٹر انڈیکسنگ

بیکٹر انڈیکسنگ ایک ڈیٹا سڑکچر ہے جو بیکٹر پر مشتمل ہے، جو خاص ریاضیائی نمونوں کے ذریعے تعمیر کیا گیا ہے۔ بیکٹر انڈیکسنگ کے ساتھ ہم مخصوص بیکٹر کے مماثل بہت سے بیکٹرز کا فوری سوال کر سکتے ہیں۔

حالیہ دور میں، صرف Qdrant صرف HNSW کو بیکٹر انڈیکس کے طور پر استعمال کرتا ہے۔

HNSW (ہائی archical Navigable Small World Graph) ایک گراف بنیادی انڈیکسنگ الگورتھم ہے۔ مخصوص اصولوں کے مطابق، یہ گراف کے لئے ایک متعدد لیئر نیویگیشن سڑکچر کا تعمیر کرتا ہے۔ اس سڑکچر میں، اوپر کے لیئرز کم گھنا ہوتے ہیں، نوڈز کے درمیان زیادہ فاصلے ہوتے ہیں۔ نچلے لیئر مضبوط ہوتے ہیں، نوڈز کے درمیان کم فاصلے ہوتے ہیں۔ تلاش اوپر سے شروع ہوتی ہے، تاکہ وہ تلاش کر سکے کہ اس لیئر میں ہدف کے قریب ترین نوڈ کو تلاش کریں اور پھر اگلے لیئر میں داخل ہوں۔ متعدد دوروں کے بعد، یہ فوراً ہدف کی جگہ کو پہنچ سکتا ہے۔

کارکردگی کی بہتری کے لیئے، HNSW نے گراف کے ہر لیئر پر نوڈز کی زیادہ سے زیادہ ڈگری کو m تک محدود کیا ہے۔ علاوہ ازیں، آپ ef_construct (انڈیکس تعمیر کے دوران) یا ef (ہدف کی تلاش کے دوران) کا استعمال کر کے تلاش کے دائرہ کار کو سپیسفائی کر سکتے ہیں۔

یہ پیرامیٹرز تشکیل فائل میں پیک کرنے کے قابل ہیں:

storage:
  hnsw_index:
    m: 16
    ef_construct: 100
    full_scan_threshold: 10000

کنالیکشن کے تشکیل کرنے کے دوران ہنسو کا مقام وزن ef پیرامیٹر کو کنفیگئر کیا جا سکتا ہے اور پہلے سے ہی ef_construct کے برابر ہو گا۔

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

v1.1.1 سے دستیاب ہے

HNSW پیرامیٹرز کو بھی محکمہ کرنے کے لیئے کلیکشن اور نامزد بیکٹرز کے ساتھ استعمال کئیے جا سکتے ہیں تاکہ سرچ کارکردگی کو بہتر بنایا جا سکے hnsw_config کے ذریعے۔

فلٹر ایبل انڈیکس

الگ پیمانہ انڈیکسز اور صرف بیکٹرز کی انڈیکسنگ واحد فلٹر کے استعمال کے لیئے پورا نہیں کر سکتے ہیں۔

اس صورتحال میں جب فلٹرز کمزور ہوں تو، HNSW انڈیکس کو براہ راست استعمال کیا جا سکتا ہے۔ اس صورتحال میں جب فلٹرز سخت ہوں تو، پیلوڈ انڈیکس کو استعمال کیا جا سکتا ہے اور مکمل طور پر دوبارہ درست کیا جا سکتا ہے۔ البتہ، بیچوں کی صورتحال میں، یہ ترتیب ناکام ہے۔

ایک طرف، ہم بہت زیادہ بیکٹرز پر پوری اسکین کرنے کا اختیار نہیں کر سکتے۔ دوسری طرف، جب زیادہ سخت فلٹرز استعمال کئے جائیں تو، HNSW گراف توڑنے لگتا ہے۔

اضافی ترتیبیں آپ کو اجازت دیتی ہیں کہ آپ ہنسو انڈیکس کا استعمال کر کے پڑوس میں واقع بیکٹرز کو تلاش کر سکیں اور گراف میں تلاش کرتے وقت فلٹرز لاگو کر سکتے ہیں۔

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