این فصل معرفی سریع دیتابیس برداری Qdrant و نحوه عملکرد دیتابیس برداری بر اساس رابط برنامه نویسی RESTful می‌باشد.

نصب Qdrant

توجه: این آموزش بر اساس نصب دیتابیس Qdrant با استفاده از Docker است. لطفاً Docker را قبل از ادامه‌ی مراحل نصب کنید.

دانلود تصویر qdrant

docker pull qdrant/qdrant

شروع سرویس دیتابیس برداری qdrant

docker run -p 6333:6333 \
    -v $(pwd)/qdrant_storage:/qdrant/storage:z \
    qdrant/qdrant

به طور پیش فرض، ما دایرکتوری فایل محلی را به کانتینر مپ می‌کنیم و تمام داده‌ها در دایرکتوری ./qdrant_storage ذخیره می‌شوند.

شما اکنون می‌توانید به Qdrant از طریق localhost:6333 دسترسی پیدا کنید.

دیتابیس برداری Qdrant از رابط برنامه نویسی RESTful برای عملیات دیتابیس پشتیبانی می‌کند، همچنین از SDK های زبان‌های برنامه نویسی مانند Python، Go و غیره پشتیبانی می‌کند. این آموزش اصلیاً بر روی توضیح استفاده از رابط برنامه نویسی RESTful تمرکز دارد.

مثال دسترسی به API

curl -X PUT 'http://localhost:6333/collections/test_collection' \
  -H 'Content-Type: application/json' \
  --data-raw '{
    "vectors": {
      "size": 4,
      "distance": "Dot"
    }
  }'

رابط کاربری وب Qdrant

از طریق آدرس http://localhost:6333/dashboard به رابط کاربری وب دسترسی پیدا کنید.

رابط کاربری وب Qdrant

ایجاد کالکشن‌ها

مفهوم کالکشن‌ها در دیتابیس برداری Qdrant می‌تواند با ساختار جدول MYSQL مقایسه شود، برای ذخیره انواع یکسان اطلاعات برداری مورد استفاده قرار می‌گیرد. هر داده‌ای که در کالکشن ذخیره می‌شود، به عنوان نقاط در Qdrant، معنای مشابهی با نقاط در فضای هندسی ریاضی دارد، نمایش دادن نقطه‌ی برداری در فضای هندسی (فقط به عنوان یک قطعه داده) را می‌پذیرد.

PUT /collections/{collection_name}

{
    "vectors": {
      "size": 300,
      "distance": "Cosine"
    }
}

توضیح پارامتر:

پارامتر توضیحات
collection_name نام کالکشن (الزامی)
vectors تعریف پارامتر بردار (الزامی)
vectors.size اندازه بردار را نشان می‌دهد (یا ابعاد بردار)
vectors.distance الگوی مشابهت بردار را نشان می‌دهد، اصولاً شامل سه الگوریتم است: "Cosine"، "Euclid"، "Dot"

اضافه کردن بردارها (نقاط)

بعد از ایجاد یک کالکشن، ما می‌توانیم اطلاعات بردار را به کالکشن اضافه کنیم. در Qdrant، اطلاعات بردار با استفاده از نقاط نشان داده می‌شود، جایی که هر داده نقطه شامل سه قسمت است: شناسه، بارگیری (داده‌های مرتبط) و اطلاعات بردار.

مثال

PUT /collections/{collection_name}/points

{
    "points": [
        {
            "id": "5c56c793-69f3-4fbf-87e6-c4bf54c28c26", // شناسه
            "payload": {"color": "red"}, // داده‌های وابسته، معمولاً ویژگی‌های مرتبط تجاری، مانند: شناسه سفارش، شناسه محصول، عنوان و غیره
            "vector": [0.9, 0.1, 0.1] // اطلاعات بردار نماینده ویژگی‌های داده تجارتی فعلی
        }
    ]
}

جستجوی بردار

پس از اضافه کردن داده‌های بردار، ما می‌توانیم جستجوی مشابهیت معنایی با استفاده از بردارها انجام دهیم.

مثال

// collection_name - نام کالکشن
POST /collections/{collection_name}/points/search

{
    "vector": [0.2, 0.1, 0.9, 0.7], // پارامتر بردار
    "limit": 3 // بازگشت سه داده بالاترین شباهت
}

توضیحات پارامتر:

  • بردار: پارامتر بردار برای جستجوی محتوای مشابه با این بردار استفاده می‌شود. به عنوان مثال: می‌توانید کلمات کلیدی مورد نیاز کاربران را به بردارها تبدیل کرده و سپس محتوای مرتبط با ورودی کاربر را جستجو کنید.

فیلترینگ ویژگی‌ها

در هنگام جستجو برای داده‌ها، به‌جای انجام جستجوهای شباهت با استفاده از بردارها، گاهی اوقات می‌خواهیم نیز فیلترینگ ویژگی‌ها را مانند کلاوز WHERE SQL برای فیلتر کردن برخی ویژگی‌ها اجرا کنیم. Qdrant از پرسمان‌های فیلتر برای فیلتر کردن ویژگی‌های مرتبط با بار (payload) پشتیبانی می‌کند.

مثال

// collection_name - نام مجموعه
POST /collections/{collection_name}/points/search

{
    "filter": { // این اصلًا برای فیلتر کردن ویژگی‌های مرتبط با بار استفاده می‌شود و قالب کلی نحوهٔ نوشتاری مشابه نحوهٔ نوشتاری الاستیک‌سرچ است. این پارامتر اختیاری است.
        "must": [ // داده‌های نقطه را با رنگ=قرمز فیلتر کنید
            {
                "key": "color",
                "match": {
                    "value": "red"
                }
            }
        ]
    },
    "vector": [0.2, 0.1, 0.9, 0.7], // پارامتر بردار
    "limit": 3
}

برای آموزش‌های جزئی‌تر، لطفا به فصل‌های زیر مراجعه کنید.