1. সংক্ষিপ্ত বিবরণ
এই কোডল্যাবে, আপনি শিখবেন কিভাবে Firestore vector similarity search ব্যবহার করে আপনার অ্যাপে শক্তিশালী অনুসন্ধান বৈশিষ্ট্য যোগ করবেন। আপনি Swift এবং SwiftUI তে লেখা একটি নোট-টেকিং অ্যাপের জন্য একটি শব্দার্থিক অনুসন্ধান বৈশিষ্ট্য বাস্তবায়ন করবেন।

তুমি কি শিখবে
- ভেক্টর এম্বেডিং গণনা করার জন্য ফায়ারস্টোর এক্সটেনশনের সাহায্যে ভেক্টর অনুসন্ধান কীভাবে ইনস্টল করবেন।
- সুইফট অ্যাপ্লিকেশন থেকে ফায়ারবেস ক্লাউড ফাংশন কীভাবে কল করবেন।
- সাইন-ইন করা ব্যবহারকারীর উপর ভিত্তি করে ডেটা কীভাবে প্রি-ফিল্টার করবেন।
আপনার যা প্রয়োজন হবে
- এক্সকোড ১৫.৩
- কোডল্যাবের নমুনা কোড। আপনি কোডল্যাবের পরবর্তী ধাপে এটি ডাউনলোড করবেন।
২. একটি ফায়ারবেস প্রকল্প তৈরি এবং সেট আপ করুন
ফায়ারবেস ভেক্টর সার্চ এক্সটেনশন ব্যবহার করার জন্য, আপনার একটি ফায়ারবেস প্রকল্প প্রয়োজন। কোডল্যাবের এই অংশে, আপনি একটি নতুন ফায়ারবেস প্রকল্প তৈরি করবেন এবং ক্লাউড ফায়ারস্টোর এবং ফায়ারবেস প্রমাণীকরণের মতো প্রয়োজনীয় পরিষেবাগুলি সক্রিয় করবেন।
একটি ফায়ারবেস প্রকল্প তৈরি করুন
- আপনার গুগল অ্যাকাউন্ট ব্যবহার করে ফায়ারবেস কনসোলে সাইন ইন করুন।
- একটি নতুন প্রকল্প তৈরি করতে বোতামটি ক্লিক করুন, এবং তারপর একটি প্রকল্পের নাম লিখুন (উদাহরণস্বরূপ,
Firestore Vector Search Codelab)। - চালিয়ে যান ক্লিক করুন।
- যদি অনুরোধ করা হয়, তাহলে Firebase শর্তাবলী পর্যালোচনা করুন এবং গ্রহণ করুন, এবং তারপর Continue এ ক্লিক করুন।
- (ঐচ্ছিক) Firebase কনসোলে ("Gemini in Firebase" নামে পরিচিত) AI সহায়তা সক্ষম করুন।
- এই কোডল্যাবের জন্য, আপনার গুগল অ্যানালিটিক্সের প্রয়োজন নেই , তাই গুগল অ্যানালিটিক্স বিকল্পটি টগল করে বন্ধ করে দিন ।
- Create project এ ক্লিক করুন, আপনার province করার জন্য অপেক্ষা করুন, এবং তারপর Continue এ ক্লিক করুন।
ফায়ারবেস প্রকল্প সম্পর্কে আরও জানতে, ফায়ারবেস প্রকল্পগুলি বুঝুন দেখুন।
আপনার Firebase মূল্য পরিকল্পনা আপগ্রেড করুন
ফায়ারবেস এক্সটেনশন এবং এর অন্তর্নিহিত ক্লাউড পরিষেবাগুলি ব্যবহার করার জন্য, আপনার ফায়ারবেস প্রকল্পটি পে-অ্যাজ-ইউ গো (ব্লেজ) মূল্য পরিকল্পনায় থাকা প্রয়োজন, যার অর্থ এটি একটি ক্লাউড বিলিং অ্যাকাউন্টের সাথে লিঙ্কযুক্ত।
- একটি ক্লাউড বিলিং অ্যাকাউন্টের জন্য একটি পেমেন্ট পদ্ধতি প্রয়োজন, যেমন একটি ক্রেডিট কার্ড।
- আপনি যদি Firebase এবং Google Cloud-এ নতুন হন, তাহলে $300 ক্রেডিট এবং একটি বিনামূল্যে ট্রায়াল ক্লাউড বিলিং অ্যাকাউন্টের জন্য যোগ্য কিনা তা পরীক্ষা করে দেখুন।
- যদি আপনি কোনও ইভেন্টের অংশ হিসেবে এই কোডল্যাবটি করেন, তাহলে আপনার আয়োজককে জিজ্ঞাসা করুন যে কোনও ক্লাউড ক্রেডিট উপলব্ধ আছে কিনা।
আপনার প্রকল্পটিকে ব্লেজ প্ল্যানে আপগ্রেড করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
- Firebase কনসোলে, আপনার প্ল্যান আপগ্রেড করতে নির্বাচন করুন।
- ব্লেজ প্ল্যানটি নির্বাচন করুন। আপনার প্রকল্পের সাথে একটি ক্লাউড বিলিং অ্যাকাউন্ট লিঙ্ক করতে অন-স্ক্রিন নির্দেশাবলী অনুসরণ করুন।
এই আপগ্রেডের অংশ হিসেবে যদি আপনার একটি ক্লাউড বিলিং অ্যাকাউন্ট তৈরি করার প্রয়োজন হয়, তাহলে আপগ্রেড সম্পূর্ণ করার জন্য আপনাকে Firebase কনসোলে আপগ্রেড ফ্লোতে ফিরে যেতে হতে পারে।
কনসোলে Firebase পণ্যগুলি সক্ষম এবং সেট আপ করুন
আপনি যে অ্যাপটি তৈরি করছেন তাতে অ্যাপল অ্যাপের জন্য উপলব্ধ বেশ কয়েকটি Firebase পণ্য ব্যবহার করা হয়েছে:
- আপনার ব্যবহারকারীদের সহজেই আপনার অ্যাপে সাইন ইন করার অনুমতি দেওয়ার জন্য ফায়ারবেস প্রমাণীকরণ ।
- ক্লাউড ফায়ারস্টোর ক্লাউডে স্ট্রাকচার্ড ডেটা সংরক্ষণ করে এবং ডেটা পরিবর্তন হলে তাৎক্ষণিক বিজ্ঞপ্তি পায়।
- আপনার ডাটাবেস সুরক্ষিত করার জন্য ফায়ারবেস নিরাপত্তা নিয়ম ।
এই পণ্যগুলির মধ্যে কিছুর বিশেষ কনফিগারেশন প্রয়োজন অথবা Firebase কনসোল ব্যবহার করে সক্ষম করা প্রয়োজন।
Firebase প্রমাণীকরণের জন্য বেনামী প্রমাণীকরণ সক্ষম করুন
এই অ্যাপ্লিকেশনটি ব্যবহারকারীদের অ্যাকাউন্ট তৈরি না করেই অ্যাপটি ব্যবহার শুরু করার অনুমতি দেওয়ার জন্য বেনামী প্রমাণীকরণ ব্যবহার করে। এর ফলে কম ঘর্ষণে অনবোর্ডিং প্রক্রিয়া তৈরি হয়। বেনামী প্রমাণীকরণ (এবং কীভাবে একটি নামযুক্ত অ্যাকাউন্টে আপগ্রেড করবেন) সম্পর্কে আরও জানতে, বেনামী প্রমাণীকরণের জন্য সেরা অনুশীলনগুলি দেখুন।
- Firebase কনসোলের বাম দিকের প্যানেলে, Build > Authentication এ ক্লিক করুন। তারপর Get start এ ক্লিক করুন।

- আপনি এখন প্রমাণীকরণ ড্যাশবোর্ডে আছেন, যেখানে আপনি সাইন-আপ করা ব্যবহারকারীদের দেখতে পারবেন, সাইন-ইন প্রদানকারী কনফিগার করতে পারবেন এবং সেটিংস পরিচালনা করতে পারবেন।
- সাইন-ইন পদ্ধতি ট্যাবটি নির্বাচন করুন (অথবা সরাসরি ট্যাবে যেতে এখানে ক্লিক করুন )।
- প্রোভাইডার অপশন থেকে Anonymous-এ ক্লিক করুন, স্যুইচটি Enable- এ টগল করুন এবং তারপর Save-এ ক্লিক করুন।
ক্লাউড ফায়ারস্টোর সেট আপ করুন
এই সুইফট অ্যাপ্লিকেশনটি নোট সংরক্ষণের জন্য ক্লাউড ফায়ারস্টোর ব্যবহার করে।
আপনার Firebase প্রকল্পে Cloud Firestore কীভাবে সেট আপ করবেন তা এখানে দেওয়া হল:
- Firebase কনসোলের বাম প্যানেলে, Build প্রসারিত করুন এবং তারপর Firestore database নির্বাচন করুন।
- ডাটাবেস তৈরি করুন ক্লিক করুন।
- ডাটাবেস আইডি
(default)এ সেট করে রাখুন। - আপনার ডাটাবেসের জন্য একটি অবস্থান নির্বাচন করুন, তারপর পরবর্তী ক্লিক করুন।
একটি আসল অ্যাপের জন্য, আপনাকে এমন একটি অবস্থান বেছে নিতে হবে যা আপনার ব্যবহারকারীদের কাছাকাছি। - পরীক্ষা মোডে শুরু করুন ক্লিক করুন। নিরাপত্তা নিয়ম সম্পর্কে দাবিত্যাগ পড়ুন।
এই কোডল্যাবে পরে, আপনার ডেটা সুরক্ষিত করার জন্য আপনি সুরক্ষা নিয়ম যোগ করবেন। আপনার ডাটাবেসের জন্য সুরক্ষা নিয়ম যোগ না করে কোনও অ্যাপ সর্বজনীনভাবে বিতরণ বা প্রকাশ করবেন না । - তৈরি করুন ক্লিক করুন।
Firebase এর জন্য ক্লাউড স্টোরেজ সেট আপ করুন
ওয়েব অ্যাপটি ছবি সংরক্ষণ, আপলোড এবং শেয়ার করার জন্য Firebase-এর জন্য ক্লাউড স্টোরেজ ব্যবহার করে।
আপনার Firebase প্রকল্পে Firebase এর জন্য ক্লাউড স্টোরেজ কীভাবে সেট আপ করবেন তা এখানে দেওয়া হল:
- Firebase কনসোলের বাম প্যানেলে, Build প্রসারিত করুন এবং তারপর Storage নির্বাচন করুন।
- শুরু করুন ক্লিক করুন।
- আপনার ডিফল্ট স্টোরেজ বাকেটের জন্য একটি অবস্থান নির্বাচন করুন।
US-WEST1,US-CENTRAL1, এবংUS-EAST1এর বাকেটগুলি Google ক্লাউড স্টোরেজের জন্য "সর্বদা বিনামূল্যে" স্তরের সুবিধা নিতে পারে। অন্যান্য সমস্ত অবস্থানের বাকেটগুলি Google ক্লাউড স্টোরেজের মূল্য এবং ব্যবহার অনুসরণ করে। - পরীক্ষা মোডে শুরু করুন ক্লিক করুন। নিরাপত্তা নিয়ম সম্পর্কে দাবিত্যাগ পড়ুন।
এই কোডল্যাবে পরে, আপনার ডেটা সুরক্ষিত করার জন্য আপনি সুরক্ষা নিয়ম যুক্ত করবেন। আপনার স্টোরেজ বাকেটের জন্য সুরক্ষা নিয়ম যুক্ত না করে কোনও অ্যাপ সর্বজনীনভাবে বিতরণ বা প্রকাশ করবেন না । - তৈরি করুন ক্লিক করুন।
৩. মোবাইল অ্যাপটি সংযুক্ত করুন
কোডল্যাবের এই অংশে, আপনি একটি সাধারণ নোট-টেকিং অ্যাপের সোর্স কোড ডাউনলোড করবেন এবং এটি আপনার তৈরি করা ফায়ারবেস প্রকল্পের সাথে সংযুক্ত করবেন।
নমুনা অ্যাপটি ডাউনলোড করুন
- https://github.com/FirebaseExtended/codelab-firestore-vectorsearch-ios এ যান, এবং আপনার স্থানীয় মেশিনে সংগ্রহস্থলটি ক্লোন করুন।
- Xcode-এ Notes.xcodeproj প্রজেক্টটি খুলুন।
অ্যাপটি আপনার Firebase প্রোজেক্টের সাথে সংযুক্ত করুন
আপনার অ্যাপটি Firebase পরিষেবা অ্যাক্সেস করতে সক্ষম হওয়ার জন্য, আপনাকে Firebase কনসোলে অ্যাপটি সেট আপ করতে হবে। আপনি একই Firebase প্রকল্পের সাথে একাধিক ক্লায়েন্ট অ্যাপ্লিকেশন সংযুক্ত করতে পারেন, উদাহরণস্বরূপ, যদি আপনি একটি Android বা ওয়েব অ্যাপ তৈরি করেন, তাহলে আপনাকে সেগুলি একই Firebase প্রকল্পের সাথে সংযুক্ত করতে হবে।
ফায়ারবেস প্রকল্প সম্পর্কে আরও জানতে, ফায়ারবেস প্রকল্পগুলি বুঝুন দেখুন।
- Firebase কনসোলে, আপনার Firebase প্রকল্পের ওভারভিউ পৃষ্ঠায় যান।

- আপনার iOS অ্যাপ যোগ করতে iOS+ আইকনে ক্লিক করুন।
- আপনার অ্যাপল অ্যাপ স্ক্রিনে ফায়ারবেস যোগ করুন- এ, এক্সকোড প্রজেক্ট ( com.google.firebase.codelab.Notes ) থেকে বান্ডেল আইডিটি প্রবেশ করান।
- আপনি যদি চান, তাহলে আপনি একটি অ্যাপের ডাকনাম ( iOS এর জন্য নোটস ) লিখতে পারেন।
- পরবর্তী ধাপে যেতে Register app এ ক্লিক করুন।
- GoogleServices-Info.plist ফাইলটি ডাউনলোড করুন।
- আপনার Xcode প্রজেক্টের Notes ফোল্ডারে GoogleServices-Info.plist টেনে আনুন। এটি করার জন্য এটি Assets.xcassets ফাইলের নিচে রেখে দেওয়া একটি ভালো উপায়।

- প্রয়োজনে Copy items নির্বাচন করুন, Add to target তে Notes target নির্বাচন করা আছে কিনা তা নিশ্চিত করুন, এবং Finish এ ক্লিক করুন।

- Firebase কনসোলে, আপনি এখন সেটআপ প্রক্রিয়ার বাকি অংশে ক্লিক করতে পারেন: এই বিভাগের শুরুতে আপনি যে নমুনাটি ডাউনলোড করেছেন তাতে ইতিমধ্যেই Firebase Apple SDK ইনস্টল করা আছে এবং initialisation সেট আপ করা আছে। Continue to console এ ক্লিক করে আপনি প্রক্রিয়াটি শেষ করতে পারেন।
অ্যাপটি চালান
এখন অ্যাপটি একবার ব্যবহার করার সময়!
- Xcode-এ ফিরে, iOS Simulator-এ অ্যাপটি চালান। Run Destinations ড্রপ-ডাউনে, প্রথমে iOS Simulators-এর একটি নির্বাচন করুন।

- তারপর, রান বোতামে ক্লিক করুন, অথবা ⌘ + R টিপুন।
- সিমুলেটরে অ্যাপটি সফলভাবে চালু হয়ে গেলে, কয়েকটি নোট যোগ করুন।
- ফায়ারবেস কনসোলে, ফায়ারস্টোর ডেটা ব্রাউজারে নেভিগেট করুন, যাতে আপনি অ্যাপে নতুন নোট যোগ করার সাথে সাথে নতুন ডকুমেন্ট তৈরি হতে দেখতে পারেন।

৪. ফায়ারস্টোর এক্সটেনশন দিয়ে ভেক্টর সার্চ ইনস্টল করুন
কোডল্যাবের এই অংশে, আপনি Firestore এক্সটেনশন সহ ভেক্টর অনুসন্ধান ইনস্টল করবেন এবং আপনার কাজ করা নোট-টেকিং অ্যাপের প্রয়োজনীয়তা অনুসারে এটি কনফিগার করবেন।
এক্সটেনশনটি ইনস্টল করা শুরু করুন
- এখনও ফায়ারস্টোর বিভাগে, এক্সটেনশন ট্যাবে ক্লিক করুন।

- এক্সপ্লোর এক্সটেনশন হাব-এ ক্লিক করুন।

- "ভেক্টর" লিখুন।
- "Vector Search with Firestore extension" এ ক্লিক করুন।
এটি আপনাকে এক্সটেনশনের বিশদ পৃষ্ঠায় নিয়ে যাবে, যেখানে আপনি এক্সটেনশনটি সম্পর্কে আরও পড়তে পারবেন, এটি কীভাবে কাজ করে, এর জন্য কোন Firebase পরিষেবাগুলি প্রয়োজন এবং আপনি কীভাবে এটি কনফিগার করতে পারেন। - Install in Firebase কনসোলে ক্লিক করুন।

- আপনার সমস্ত প্রকল্পের একটি তালিকা আপনাকে উপস্থাপন করা হবে।
- এই কোডল্যাবের প্রথম ধাপে আপনার তৈরি করা প্রকল্পটি বেছে নিন।

এক্সটেনশনটি কনফিগার করুন
- সক্রিয় API গুলি এবং তৈরি করা সংস্থানগুলি পর্যালোচনা করুন।

- প্রয়োজনীয় পরিষেবাগুলি সক্ষম করুন।

- সমস্ত পরিষেবা সক্রিয় হয়ে গেলে, Next এ ক্লিক করুন।

- এই এক্সটেনশনে মঞ্জুর করা অ্যাক্সেস পর্যালোচনা করুন।
- এক্সটেনশনটি কনফিগার করুন:
- এলএলএম হিসেবে ভার্টেক্স এআই নির্বাচন করুন
- সংগ্রহের পথ : নোট
- ডিফল্ট ক্যোয়ারী সীমা : 3
- ইনপুট ক্ষেত্রের নাম : টেক্সট
- আউটপুট ক্ষেত্রের নাম: এম্বেডিং
- স্ট্যাটাস ফিল্ডের নাম: * *স্ট্যাটাস*
- বিদ্যমান নথিগুলি এম্বেড করুন : হ্যাঁ
- বিদ্যমান নথিগুলি আপডেট করুন : হ্যাঁ
- ক্লাউড ফাংশন অবস্থান : us-central1
- ইনস্টলেশন সম্পন্ন করতে Install extension এ ক্লিক করুন।
এতে কয়েক মিনিট সময় লাগতে পারে। ইনস্টলেশন সম্পূর্ণ হওয়ার অপেক্ষায়, টিউটোরিয়ালের পরবর্তী অংশে যেতে দ্বিধা করবেন না এবং ভেক্টর এম্বেডিং সম্পর্কে কিছু পটভূমি তথ্য পড়তে পারবেন।
৫. পটভূমি
ইনস্টলেশন শেষ হওয়ার জন্য অপেক্ষা করার সময়, Firestore এক্সটেনশন সহ ভেক্টর অনুসন্ধান কীভাবে কাজ করে সে সম্পর্কে কিছু পটভূমি তথ্য এখানে দেওয়া হল।
ভেক্টর, এম্বেডিং এবং ভেক্টর ডাটাবেস কী?
- ভেক্টর হলো গাণিতিক বস্তু যা একটি পরিমাণের মাত্রা এবং দিক নির্দেশ করে। এগুলি এমনভাবে তথ্য উপস্থাপন করতে ব্যবহার করা যেতে পারে যা তুলনা এবং অনুসন্ধান করা সহজ করে তোলে।
- এম্বেডিং হলো ভেক্টর যা একটি শব্দ বা বাক্যাংশের অর্থ উপস্থাপন করে। এগুলি তৈরি করা হয় একটি বৃহৎ পাঠ্যের উপর একটি নিউরাল নেটওয়ার্ককে প্রশিক্ষণ দিয়ে এবং শব্দের মধ্যে সম্পর্ক শেখার মাধ্যমে।
- ভেক্টর ডাটাবেস হলো এমন ডাটাবেস যা ভেক্টর ডেটা সংরক্ষণ এবং অনুসন্ধানের জন্য অপ্টিমাইজ করা হয়। এগুলি দক্ষ নিকটতম প্রতিবেশী অনুসন্ধানের অনুমতি দেয়, যা একটি প্রদত্ত কোয়েরি ভেক্টরের সাথে সবচেয়ে সাদৃশ্যপূর্ণ ভেক্টর খুঁজে বের করার প্রক্রিয়া।
ভেক্টর অনুসন্ধান কিভাবে কাজ করে?
ভেক্টর অনুসন্ধান ডাটাবেসের সমস্ত ভেক্টরের সাথে কোয়েরি ভেক্টরের তুলনা করে কাজ করে। কোয়েরি ভেক্টরের সাথে সবচেয়ে বেশি সাদৃশ্যপূর্ণ ভেক্টরগুলি অনুসন্ধান ফলাফল হিসাবে ফেরত পাঠানো হয়।
দুটি ভেক্টরের মধ্যে সাদৃশ্য বিভিন্ন দূরত্বের মেট্রিক ব্যবহার করে পরিমাপ করা যেতে পারে। সবচেয়ে সাধারণ দূরত্বের মেট্রিক হল কোসাইন সাদৃশ্য, যা দুটি ভেক্টরের মধ্যে কোণ পরিমাপ করে।
৬. ফায়ারস্টোর এক্সটেনশন দিয়ে ভেক্টর সার্চ ব্যবহার করে দেখুন।
এই কোডল্যাবে আগে ডাউনলোড করা iOS অ্যাপে ভেক্টর সার্চ উইথ ফায়ারস্টোর এক্সটেনশনটি ব্যবহার করার আগে, আপনি ফায়ারবেস কনসোলে এক্সটেনশনটি ব্যবহার করে দেখতে পারেন।
ডকুমেন্টেশন পড়ুন
ফায়ারবেস এক্সটেনশনগুলিতে তারা কীভাবে কাজ করে তার ডকুমেন্টেশন অন্তর্ভুক্ত থাকে।
- এক্সটেনশনটি ইনস্টল করা শেষ হয়ে গেলে, শুরু করুন বোতামে ক্লিক করুন।

- "এই এক্সটেনশনটি কীভাবে কাজ করে" ট্যাবটি দেখুন - এটি ব্যাখ্যা করে:
-
notesসংগ্রহে ডকুমেন্ট যোগ করে কীভাবে এম্বেডিং গণনা করা যায়, -
ext-firestore-vector-search-queryCallablecallable ফাংশনটি কল করে কীভাবে সূচকটি অনুসন্ধান করবেন, - অথবা
_firestore-vector-search/index/queriesসংগ্রহে একটি কোয়েরি ডকুমেন্ট যোগ করে কীভাবে সূচকটি কোয়েরি করবেন। - এটি একটি কাস্টম এম্বেডিং ফাংশন কীভাবে সেট আপ করবেন তাও ব্যাখ্যা করে - এক্সটেনশন দ্বারা সমর্থিত কোনও LLM আপনার প্রয়োজনীয়তা পূরণ না করলে এবং আপনি এম্বেডিং গণনা করার জন্য একটি ভিন্ন LLM ব্যবহার করতে চাইলে এটি কার্যকর।

-
- আপনার ফায়ারস্টোর ইনস্ট্যান্সে যেতে ক্লাউড ফায়ারস্টোর ড্যাশবোর্ড লিঙ্কে ক্লিক করুন।
-
_firestore-vector-search/indexডকুমেন্টে নেভিগেট করুন। এটি দেখাবে যে এক্সটেনশনটি এই কোডল্যাবের আগের ধাপে আপনার তৈরি সমস্ত নোট ডকুমেন্টের জন্য এম্বেডিং গণনা সম্পন্ন করেছে।
- এটি যাচাই করার জন্য, নোট ডকুমেন্টগুলির একটি খুলুন, এবং আপনি
vector<768>টাইপেরembeddingনামে একটি অতিরিক্ত ক্ষেত্র, সেইসাথে একটিstatusক্ষেত্র দেখতে পাবেন।
একটি নমুনা নথি তৈরি করুন
এক্সটেনশনটি কীভাবে কাজ করছে তা দেখতে আপনি Firebase কনসোলে একটি নতুন ডকুমেন্ট তৈরি করতে পারেন।
- এখনও ফায়ারস্টোর ডেটা ব্রাউজারে থাকা অবস্থায়,
notesসংগ্রহে যান এবং মাঝের কলামে + অ্যাড ডকুমেন্টে ক্লিক করুন।
- একটি নতুন অনন্য ডকুমেন্ট আইডি তৈরি করতে অটো-আইডিতে ক্লিক করুন।
- স্ট্রিং টাইপের
textনামে একটি ফিল্ড যোগ করুন এবং ভ্যালু ফিল্ডে কিছু টেক্সট পেস্ট করুন। এটি গুরুত্বপূর্ণ যে এটি lorem ipsum বা অন্য কোনও এলোমেলো টেক্সট নয়। উদাহরণস্বরূপ, একটি সংবাদ নিবন্ধ বেছে নিন।
- সংরক্ষণ করুন ক্লিক করুন।
- লক্ষ্য করুন কিভাবে এক্সটেনশনটি ডেটা প্রক্রিয়াকরণ করছে তা নির্দেশ করার জন্য একটি স্ট্যাটাস ফিল্ড যোগ করে।
- কিছুক্ষণ পরে, আপনি
vector<768>এর মান সহ একটি নতুন ক্ষেত্রembeddingদেখতে পাবেন।

একটি কোয়েরি সম্পাদন করুন
ফায়ারস্টোর এক্সটেনশনের সাথে ভেক্টর সার্চের একটি চমৎকার বৈশিষ্ট্য রয়েছে যা আপনাকে কোনও অ্যাপ সংযোগ না করেই ডকুমেন্ট ইনডেক্স অনুসন্ধান করতে দেয়।
- Firebase কনসোলের Firestore বিভাগে,
_firestore-vector-search/indexডকুমেন্টে যান। - + সংগ্রহ শুরু করুন এ ক্লিক করুন

-
queriesনামে একটি নতুন উপ-সংগ্রহ তৈরি করুন - একটি নতুন ডকুমেন্ট তৈরি করুন এবং
queryফিল্ডটি এমন একটি টেক্সটে সেট করুন যা আপনার ডকুমেন্টগুলির একটিতে থাকে। এটি "How can I map Firestore documents with Swift" এর মতো সিমেন্টিক কোয়েরির জন্য সবচেয়ে ভালো কাজ করে (যদি আপনার যোগ করা নোটগুলির মধ্যে অন্তত একটিতে এই বিষয় নিয়ে আলোচনা করা টেক্সট থাকে)।
- আপনি স্ট্যাটাসে একটি ত্রুটি দেখতে পারেন।

- এটি একটি অনুপস্থিত সূচকের কারণে। অনুপস্থিত সূচক কনফিগারেশন সেট আপ করতে, এই লিঙ্কটি অনুসরণ করে আপনার প্রকল্পের জন্য গুগল ক্লাউড কনসোলে যান এবং তারপর তালিকা থেকে আপনার প্রকল্পটি নির্বাচন করুন।

- ক্লাউড লগ এক্সপ্লোরারে, আপনি এখন একটি ত্রুটি বার্তা দেখতে পাবেন যেখানে লেখা আছে "FAILED_PRECONDITION: ভেক্টর সূচক কনফিগারেশন অনুপস্থিত। অনুগ্রহ করে নিম্নলিখিত gcloud কমান্ড ব্যবহার করে প্রয়োজনীয় সূচক তৈরি করুন: ..."

- ত্রুটি বার্তাটিতে একটি
gcloudকমান্ডও রয়েছে যা আপনাকে অনুপস্থিত সূচকটি কনফিগার করতে চালাতে হবে। - আপনার কমান্ড লাইন থেকে নিম্নলিখিত কমান্ডটি চালান। যদি আপনার মেশিনে
gcloudCLI ইনস্টল না থাকে, তাহলে এটি ইনস্টল করার জন্য এখানে দেওয়া নির্দেশাবলী অনুসরণ করুন। সূচী তৈরি করতে কয়েক মিনিট সময় লাগে। আপনি Firebase কনসোলের Firestore বিভাগে Indexes ট্যাবে অগ্রগতি পরীক্ষা করতে পারেন।gcloud alpha firestore indexes composite create --project=INSERT-YOUR=PROJECT-ID-HERE --collection-group=notes --query-scope=COLLECTION --field-config=vector-config='{"dimension":"768","flat": "{}"}',field-path=embedding
- একবার সূচী সেট আপ হয়ে গেলে, আপনি একটি নতুন কোয়েরি ডকুমেন্ট তৈরি করতে পারেন।
- এখন আপনি ফলাফল ক্ষেত্রে মিলিত ডকুমেন্ট আইডিগুলির একটি তালিকা দেখতে পাবেন।

- ঐ আইডিগুলির একটি কপি করুন, এবং
notesসংগ্রহে ফিরে যান। - আপনার কপি করা ডকুমেন্ট আইডিটি অনুসন্ধান করতে ⌘+F ব্যবহার করুন - এই ডকুমেন্টটি আপনার কোয়েরির সাথে সবচেয়ে ভালোভাবে মেলে।

৭. শব্দার্থিক অনুসন্ধান বাস্তবায়ন করুন
অবশেষে আপনার মোবাইল অ্যাপটিকে ভেক্টর সার্চ উইথ ফায়ারস্টোর এক্সটেনশনের সাথে সংযুক্ত করার এবং একটি শব্দার্থিক অনুসন্ধান বৈশিষ্ট্য বাস্তবায়নের সময় এসেছে যা আপনার ব্যবহারকারীদের প্রাকৃতিক ভাষা অনুসন্ধান ব্যবহার করে তাদের নোট অনুসন্ধান করতে দেবে।
কোয়েরি সম্পাদনের জন্য কলযোগ্য ফাংশনটি সংযুক্ত করুন।
Firestore এক্সটেনশনের সাথে ভেক্টর সার্চ-এ একটি ক্লাউড ফাংশন রয়েছে যা আপনি আপনার মোবাইল অ্যাপ থেকে কল করে এই কোডল্যাবে আগে তৈরি করা ইনডেক্সটি জিজ্ঞাসা করতে পারেন। এই ধাপে, আপনি আপনার মোবাইল অ্যাপ এবং এই কলযোগ্য ফাংশনের মধ্যে একটি সংযোগ স্থাপন করবেন। Firebase-এর Swift SDK-তে এমন API রয়েছে যা দূরবর্তী ফাংশনগুলিকে কল করাকে নির্বিঘ্ন করে তোলে।
- Xcode-এ ফিরে যান, এবং নিশ্চিত করুন যে আপনি এই কোডল্যাবের আগের ধাপে ক্লোন করা প্রকল্পটিতে আছেন।
-
NotesRepository.swiftফাইলটি খুলুন। -
private lazy var vectorSearchQueryCallable: Callableধারণকারী লাইনটি খুঁজুন= functions.httpsCallable("") private lazy var vectorSearchQueryCallable: Callable= functions.httpsCallable("")
একটি কলযোগ্য ক্লাউড ফাংশন চালু করতে, আপনাকে যে ফাংশনটি কল করতে চান তার নাম প্রদান করতে হবে।
- আপনার প্রকল্পের জন্য Firebase কনসোলে যান এবং বিল্ড বিভাগে ফাংশন মেনু আইটেমটি খুলুন।
- আপনি এক্সটেনশন দ্বারা ইনস্টল করা ফাংশনগুলির একটি তালিকা দেখতে পাবেন।
-
ext-firestore-vector-search-queryCallableনামের একটিটি অনুসন্ধান করুন এবং এর নামটি অনুলিপি করুন। - আপনার কোডে নামটি পেস্ট করুন। এটি এখন পড়া উচিত
private lazy var vectorSearchQueryCallable: Callable<String, String> = functions.httpsCallable("ext-firestore-vector-search-queryCallable")
কোয়েরি ফাংশনটি কল করুন
-
performQueryপদ্ধতিটি খুঁজুন - আপনার কলযোগ্য ফাংশনটি ইনভোক করে কল করুন
let result = try await vectorSearchQueryCallable(searchTerm)
যেহেতু এটি একটি দূরবর্তী কল, এটি ব্যর্থ হতে পারে।
- যেকোনো ত্রুটি ধরার জন্য কিছু মৌলিক ত্রুটি পরিচালনা যোগ করুন এবং Xcode এর কনসোলে লগ করুন।
private func performQuery(searchTerm: String) async -> [String] { do { let result = try await vectorSearchQueryCallable(searchTerm) return [result] } catch { print(error.localizedDescription) return [] } }
UI সংযুক্ত করুন
ব্যবহারকারীদের তাদের নোট অনুসন্ধান করার অনুমতি দেওয়ার জন্য, আপনি নোট তালিকার স্ক্রিনে একটি অনুসন্ধান বার প্রয়োগ করবেন। যখন ব্যবহারকারী একটি অনুসন্ধান শব্দ টাইপ করেন, তখন আপনাকে পূর্ববর্তী ধাপে প্রয়োগ করা performQuery পদ্ধতিটি ব্যবহার করতে হবে। SwiftUI দ্বারা সরবরাহিত searchable এবং task ভিউ মডিফায়ারগুলির জন্য ধন্যবাদ, এর জন্য কেবল কয়েকটি লাইন কোডের প্রয়োজন।
- প্রথমে,
NotesListScreen.swiftখুলুন। - তালিকা ভিউতে একটি অনুসন্ধান বাক্স যোগ করতে,
.navigationTitle("Notes")লাইনের ঠিক উপরে.searchable(text: $searchTerm, prompt: "Search")ভিউ মডিফায়ার যোগ করুন। - তারপর, নীচের কোডটি যোগ করে অনুসন্ধান ফাংশনটি চালু করুন:
.task(id: searchTerm, debounce: .milliseconds(800)) {
await notesRepository.semanticSearch(searchTerm: searchTerm)
}
এই কোড স্নিপেটটি আপনার semanticSearch পদ্ধতিটিকে অ্যাসিঙ্ক্রোনাসভাবে কল করে। 800 মিলিসেকেন্ডের টাইমআউট প্রদান করে, আপনি টাস্ক মডিফায়ারকে ব্যবহারকারীর ইনপুট 0.8 সেকেন্ডের জন্য ডিবাউন্স করার নির্দেশ দেন। এর অর্থ হল, ব্যবহারকারী 0.8 সেকেন্ডের বেশি টাইপিং থামিয়ে দিলেই কেবল semanticSearch কল করা হবে।
আপনার কোডটি এখন এইরকম দেখা উচিত:
...
List(repository.notes) { note in
NavigationLink(value: note) {
NoteRowView(note: note)
}
.swipeActions {
Button(role: .destructive, action: { deleteNote(note: note) }) {
Label("Delete", systemImage: "trash")
}
}
}
.searchable(text: $searchTerm, prompt: "Search")
.task(id: searchTerm, debounce: .milliseconds(800)) {
await notesRepository.semanticSearch(searchTerm: searchTerm)
}
.navigationTitle("Notes")
...
অ্যাপটি চালান
- iOS সিমুলেটরে অ্যাপটি চালু করতে ⌘ + R টিপুন (অথবা রান বোতামে ক্লিক করুন)।
- এই কোডল্যাবে আপনি অ্যাপে আগে যে নোটগুলি যোগ করেছিলেন, সেই নোটগুলি এবং ফায়ারবেস কনসোলের মাধ্যমে আপনার যোগ করা নোটগুলিও দেখতে পাবেন।
- নোট তালিকার শীর্ষে আপনার একটি অনুসন্ধান ক্ষেত্র দেখতে হবে।
- আপনার যোগ করা ডকুমেন্টগুলির মধ্যে একটিতে প্রদর্শিত একটি শব্দ টাইপ করুন। আবার, এটি "How can I call asynchronous Firebase APIs from Swift" এর মতো শব্দার্থিক প্রশ্নের জন্য সবচেয়ে ভালো কাজ করে (যদি আপনার যোগ করা নোটগুলির মধ্যে অন্তত একটিতে এই বিষয় নিয়ে আলোচনা করা টেক্সট থাকে)।
- আপনি সম্ভবত অনুসন্ধানের ফলাফলটি দেখতে পাবেন বলে আশা করছেন, কিন্তু পরিবর্তে, তালিকার দৃশ্যটি খালি রয়েছে এবং এক্সকোড কনসোলটি একটি ত্রুটি বার্তা প্রদর্শন করে: "ফাংশনটি একটি অবৈধ যুক্তি দিয়ে কল করা হয়েছিল"

এর মানে হল আপনি ভুল ফর্ম্যাটে ডেটা পাঠিয়েছেন।
ত্রুটি বার্তা বিশ্লেষণ করুন
- কী সমস্যা তা জানতে, Firebase কনসোলে যান।
- ফাংশন বিভাগে যান।
-
ext-firestore-vector-search-queryCallableফাংশনটি খুঁজুন, তিনটি উল্লম্ব বিন্দুতে ক্লিক করে ওভারফ্লো মেনু খুলুন। - লগ এক্সপ্লোরারে যেতে লগ দেখুন নির্বাচন করুন
- তোমার একটি ত্রুটি দেখা উচিত।
Unhandled error ZodError: [
{
"code": "invalid_type",
"expected": "object",
"received": "string",
"path": [],
"message": "Expected object, received string"
}
]
এর মানে হল আপনি ভুল ফর্ম্যাটে ডেটা পাঠিয়েছেন।
সঠিক ডেটা টাইপ ব্যবহার করুন
এক্সটেনশনটি কোন ফর্ম্যাটে প্যারামিটারগুলি আশা করে তা জানতে, এক্সটেনশনের ডকুমেন্টেশনটি দেখুন।
- Firebase কনসোলের এক্সটেনশন বিভাগে যান।
- Manage -> এ ক্লিক করুন।

- "এই এক্সটেনশনটি কীভাবে কাজ করে" বিভাগে, আপনি ইনপুট এবং আউটপুট প্যারামিটারগুলির একটি স্পেসিফিকেশন পাবেন।

- Xcode-এ ফিরে যান, এবং
NotesRepository.swiftএ নেভিগেট করুন। - ফাইলের শুরুতে নিম্নলিখিত কোডটি যোগ করুন:
এক্সটেনশনের ডকুমেন্টেশন অনুসারে,private struct QueryRequest: Codable { var query: String var limit: Int? var prefilters: [QueryFilter]? } private struct QueryFilter: Codable { var field: String var `operator`: String var value: String } private struct QueryResponse: Codable { var ids: [String] }QueryRequestএক্সটেনশনের প্রত্যাশিত ইনপুট প্যারামিটারের কাঠামোর সাথে মেলে। এতে একটি নেস্টেডprefilterঅ্যাট্রিবিউটও রয়েছে যা আপনার পরে প্রয়োজন হবে।QueryResponseএক্সটেনশনের প্রতিক্রিয়ার কাঠামোর সাথে মেলে। - কলযোগ্য ফাংশন স্পেসিফিকেশন খুঁজুন এবং ইনপুট এবং আউটপুট প্রকারগুলি আপডেট করুন
private lazy var vectorSearchQueryCallable: Callable<QueryRequest, QueryResponse> = functions.httpsCallable("ext-firestore-vector-search-queryCallable") performQueryতে কলযোগ্য ফাংশনের আমন্ত্রণ আপডেট করুনprivate func performQuery(searchTerm: String) async -> [String] { do { let queryRequest = QueryRequest(query: searchTerm, limit: 2) let result = try await vectorSearchQueryCallable(queryRequest) print(result.ids) return result.ids } catch { print(error.localizedDescription) return [] } }
অ্যাপটি আবার চালান
- অ্যাপটি আবার চালান
- আপনার নোটগুলির একটিতে অন্তর্ভুক্ত শব্দগুলি সহ একটি অনুসন্ধান কোয়েরি টাইপ করুন।
- এখন আপনার নোটের একটি ফিল্টার করা তালিকা দেখতে হবে।

ব্যবহারকারীর ডেটা প্রি-ফিল্টার করুন
উদযাপনের জন্য নাচতে শুরু করার আগে - অ্যাপটির বর্তমান সংস্করণে একটি সমস্যা আছে: ফলাফল সেটে সমস্ত ব্যবহারকারীর ডেটা রয়েছে।
আপনি অন্য একটি সিমুলেটরে অ্যাপটি চালিয়ে এবং আরও ডকুমেন্ট যোগ করে এটি যাচাই করতে পারেন। নতুন ডকুমেন্টগুলি কেবল সেই সিমুলেটরেই দেখা যাবে, যদি আপনি অন্য সিমুলেটরে অ্যাপটি আবার চালান, তাহলে আপনি কেবল সেই ডকুমেন্টগুলি দেখতে পাবেন যা আপনি প্রথমবার তৈরি করেছিলেন।
যদি আপনি একটি অনুসন্ধান করেন, তাহলে আপনি লক্ষ্য করবেন যে vectorSearchQueryCallable এ কল করলে এমন ডকুমেন্ট আইডি ফেরত আসে যা অন্য ব্যবহারকারীর হতে পারে। এটি প্রতিরোধ করার জন্য, আমাদের একটি prefilter ব্যবহার করতে হবে।
performQuery তে, আপনার কোডটি নিম্নরূপ আপডেট করুন:
let prefilters: [QueryFilter] = if let uid = user?.uid {
[QueryFilter(field: "userId", operator: "==", value: uid)]
}
else {
[]
}
let queryRequest = QueryRequest(query: searchTerm,
limit: 2,
prefilters: prefilters)
এটি লগ-ইন করা ব্যবহারকারীর আইডির উপর ভিত্তি করে ডেটা প্রি-ফিল্টার করবে। আপনি যেমনটি আশা করতে পারেন, এর জন্য ফায়ারস্টোর সূচক আপডেট করা প্রয়োজন।
embedding ফিল্ডে userId এবং ভেক্টর এম্বেডিং উভয়ই অন্তর্ভুক্ত করে এমন একটি নতুন ফায়ারস্টোর সূচক সংজ্ঞায়িত করতে কমান্ড লাইন থেকে নিম্নলিখিত কমান্ডটি চালান।
gcloud alpha firestore indexes composite create --project=INSERT-YOUR-PROJECT-ID-HERE --collection-group=notes --query-scope=COLLECTION --field-config=order=ASCENDING,field-path=userId --field-config=vector-config='{"dimension":"768","flat": "{}"}',field-path=embedding
একবার সূচক তৈরি শেষ হয়ে গেলে, অ্যাপটি আবার চালান যাতে এটি প্রত্যাশা অনুযায়ী কাজ করে তা যাচাই করা যায়।

৮. অভিনন্দন
অভিনন্দন - এই কোডল্যাবটি সফলভাবে সম্পন্ন করার জন্য!
এই কোডল্যাবে, আপনি শিখেছেন কিভাবে:
- শব্দার্থিক অনুসন্ধান সক্ষম করে একটি ক্লাউড ফায়ারস্টোর ডাটাবেস সেট আপ করুন।
- ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করার জন্য একটি সহজ SwiftUI অ্যাপ তৈরি করুন।
- SwiftUI এর অনুসন্ধানযোগ্য ভিউ মডিফায়ার এবং টাস্ক মডিফায়ার ব্যবহার করে একটি অনুসন্ধান বার প্রয়োগ করুন।
- ফায়ারস্টোর SDK এর কলেবল ইন্টারফেস ব্যবহার করে ডাটাবেসে একটি শব্দার্থিক অনুসন্ধান সম্পাদনের জন্য একটি ক্লাউড ফাংশন কল করুন।
এই কোডল্যাবে অর্জিত জ্ঞানের সাহায্যে, আপনি এখন শক্তিশালী অ্যাপ্লিকেশন তৈরি করতে পারবেন যা ক্লাউড ফায়ারস্টোরের শব্দার্থিক অনুসন্ধান ক্ষমতা ব্যবহার করে ব্যবহারকারীদের আরও স্বজ্ঞাত এবং দক্ষ অনুসন্ধান অভিজ্ঞতা প্রদান করবে।
ফায়ারস্টোরের নতুন ভেক্টর ফিল্ড এবং ভেক্টর এম্বেডিং কীভাবে গণনা করতে হয় সে সম্পর্কে আরও জানতে, ডকুমেন্টেশনটি দেখুন।