আপনার অ্যাপে সার্চ কীভাবে যোগ করবেন: সাধারণ ফিল্টার থেকে ফুল-টেক্সট সার্চ পর্যন্ত
অ্যাপে সার্চ যোগ করতে সবচেয়ে সহজ, কাজ করে এমন জিনিস দিয়ে শুরু করুন: একটি সার্চ বক্স, যা একটি সার্ভার রুট কল করে, যে রুট আপনার ডাটাবেসের সারিগুলো কয়েকটি কলামের সঙ্গে কোয়েরি মিলিয়ে ফিল্টার করে, সাথে ক্যাটাগরি বা দামের মতো ফিল্টার। এটি যথেষ্ট না হলে — প্রাসঙ্গিকতা অনুযায়ী র্যাঙ্কিং, শব্দের স্টেমিং বা অনেক রেকর্ড দরকার হলে — আপনার ডাটাবেসের ফুল-টেক্সট সার্চে যান, আর শুধু শক্তিশালী টাইপো-সহনশীলতা বা খুব বড় ডাটা জুড়ে তাৎক্ষণিক ফলাফল দরকার হলে একটি হোস্টেড সার্চ ইঞ্জিনে যান। যা-ই বাছুন, সার্চকে অবশ্যই অনুমতি মেনে চলতে হবে: ব্যবহারকারী যে রেকর্ড দেখার অনুমতি পায়নি তা কখনো যেন সার্চে না আসে।
আপনার অ্যাপের জন্য "সার্চ" মানে কী
সার্চ কয়েকটি ভিন্ন জিনিস বোঝায়, এবং বেশিরভাগ অ্যাপের একাধিক দরকার হয়:
- কীওয়ার্ড সার্চ: একটি টেক্সট বক্স — "'garden' উল্লেখ আছে এমন তালিকা খোঁজো"।
- ফিল্টার: কাঠামোগত পছন্দ — ক্যাটাগরি, শহর, দামের সীমা, তারিখ, অবস্থা।
- সর্টিং: সবচেয়ে নতুন, সবচেয়ে সস্তা, সবচেয়ে প্রাসঙ্গিক।
- অটোকমপ্লিট: টাইপ করার সময় পরামর্শ।
- টাইপো-সহনশীলতা: "restuarant" লিখলেও "restaurant" খুঁজে পাওয়া।
একটি ডিরেক্টরি, চাকরির বোর্ড বা দোকানের জন্য ফিল্টারই প্রায়ই টেক্সট বক্সের চেয়ে বেশি গুরুত্বপূর্ণ। কোনো টুল বাছার আগে আপনার আসলে কোনগুলো দরকার তা ঠিক করুন।
আপনার বিকল্পগুলো
| পদ্ধতি | কীভাবে কাজ করে | কীসের জন্য ভালো | সীমাবদ্ধতা |
|---|---|---|---|
| ব্রাউজারে ফিল্টার করা | তালিকা লোড করে, JavaScript-এ ফিল্টার করা | ছোট পাবলিক তালিকা (কয়েকশো আইটেম) | প্রতিটি ভিজিটরের কাছে সব ডাটা পাঠায়; বড় তালিকায় ধীর |
| ডাটাবেস প্যাটার্ন মেলানো | সার্ভার কোয়েরি "নাম এই টেক্সট ধারণ করে", ছোট-বড় হাতের অক্ষর উপেক্ষা করে | ছোট থেকে মাঝারি অ্যাপ, অ্যাডমিন টুল | র্যাঙ্কিং নেই; বড় টেবিলে ধীর হতে পারে; স্টেমিং নেই |
| ডাটাবেস ফুল-টেক্সট সার্চ | Postgres শব্দ ইনডেক্স করে এবং মিলের র্যাঙ্ক দেয় | বেশিরভাগ কন্টেন্ট-ভারী অ্যাপ | ফাজি মিল যোগ না করলে টাইপোতে দুর্বল |
| ফাজি মিল (trigram) | Postgres অক্ষরের ক্রম তুলনা করে সাদৃশ্য খোঁজে | নাম, ছোট ফিল্ড, টাইপো-সহনশীলতা | একটি এক্সটেনশন ও ইনডেক্স লাগে; টিউন করা সময় নেয় |
| হোস্টেড সার্চ ইঞ্জিন | একটি আলাদা সার্ভিস আপনার ডাটা ইনডেক্স করে (Algolia, Meilisearch, Typesense, Elasticsearch ও অন্যান্য) | বড় ক্যাটালগ, তাৎক্ষণিক সার্চ, শক্তিশালী টাইপো-সহনশীলতা | আরেকটি সার্ভিস, যার সঙ্গে ডাটা সিঙ্ক রাখতে, খরচ দিতে ও সুরক্ষিত রাখতে হয় |
আপনার ডাটা যদি ইতিমধ্যে Postgres-এ থাকে, তবে এর বিল্ট-ইন ফুল-টেক্সট সার্চ একটি শক্ত মাঝামাঝি বিকল্প। এটি লেখাকে শব্দে ভাগ করে, সেগুলোকে স্টেমে নামায় (যাতে "running" "run"-এর সঙ্গে মেলে), সাধারণ শব্দ বাদ দেয় এবং মিলের মান অনুযায়ী ফলাফল র্যাঙ্ক করতে পারে। সঠিক ইনডেক্স থাকলে এটি বড় টেবিলেও দ্রুত থাকে।
উদাহরণ প্রম্পট
একটি সহজ শুরু:
লিস্টিং পেজে একটি সার্চ বক্স ও ফিল্টার যোগ করো। সার্চ শিরোনাম ও বর্ণনার সঙ্গে কোয়েরি মেলাবে, ছোট-বড় হাতের অক্ষর উপেক্ষা করে। ফিল্টার: ক্যাটাগরি (ড্রপডাউন), শহর (ড্রপডাউন) এবং সর্বোচ্চ দাম। সার্চ সার্ভারে করো, একটি পেজিনেটেড API রুট দিয়ে, প্রতি পেজে ২০টি ফলাফল। সার্চ ও ফিল্টার URL-এ রাখো, যাতে ফলাফল শেয়ার করা যায় এবং ব্যাক বাটন কাজ করে। কিছু না মিললে একটি বন্ধুত্বপূর্ণ খালি-অবস্থা দেখাও।
ফুল-টেক্সট সার্চে আপগ্রেড:
লিস্টিং সার্চ Postgres ফুল-টেক্সট সার্চে বদলাও: শিরোনামে (বেশি ওজনসহ) ও বর্ণনায়। সঠিক ইনডেক্স যোগ করো, প্রাসঙ্গিকতা অনুযায়ী ফলাফল র্যাঙ্ক করো, এবং বিদ্যমান ফিল্টার ও পেজিনেশন রাখো। কোনো বিদ্যমান ডাটা বদলিও না।
নামের জন্য টাইপো-সহনশীলতা যোগ করা:
ব্যবসার নামে ফাজি মিল যোগ করো, যাতে ছোট টাইপো তবু ফলাফল খুঁজে দেয়। সম্ভব হলে trigram similarity ব্যবহার করো, একটি ইনডেক্সসহ, আর না থাকলে বর্তমান সার্চে ফিরে যাও।
ধাপে ধাপে
- মানুষ কী খোঁজে তার তালিকা করুন। কোন ফিল্ড (শিরোনাম, বর্ণনা, ট্যাগ, নাম)? কোন ফিল্টার? সম্ভব হলে কয়েকজন আসল ব্যবহারকারীকে জিজ্ঞেস করুন।
- সার্ভার-সাইড দিয়ে শুরু করুন। একটি API রুট যোগ করুন, যা কোয়েরি ও ফিল্টার নেয় এবং ফলাফলের এক পেজ ফেরত দেয়। সবকিছু ব্রাউজারে লোড করবেন না।
- কোয়েরিতে অনুমতি প্রয়োগ করুন। ব্যবহারকারী যদি শুধু নিজের রেকর্ড বা শুধু প্রকাশিত রেকর্ড দেখতে পায়, সেই শর্তটি সার্চের একই কোয়েরিতে থাকতে হবে।
- প্রথম দিন থেকেই পেজিনেশন যোগ করুন — পেজ নম্বর বা "আরও লোড করুন"।
- সার্চের অবস্থা URL-এ রাখুন (যেমন
?q=garden&city=leeds)। শেয়ারযোগ্য লিংক, কাজ করা ব্যাক বাটন, এবং চাইলে সার্চ ইঞ্জিনও ফিল্টার করা পেজ ক্রল করতে পারে। - টাইপ করার সময় সার্চ ডিবাউন্স করুন। টাইপ করা থামার পর কয়েকশো মিলিসেকেন্ড অপেক্ষা করুন, প্রতিটি কী-প্রেসে অনুরোধ না পাঠাতে।
- কোন কলামে ফিল্টার বা সার্চ হয় জানার পর ইনডেক্স যোগ করুন।
- আপগ্রেড করুন: ফুল-টেক্সট সার্চ, তারপর ফাজি মিল, তারপর হোস্টেড ইঞ্জিন — শুধু তখনই, যখন সহজ ধাপটি আসল ব্যবহারকারীদের কাছে ব্যর্থ হয়।
- বাস্তবসম্মত ডাটা দিয়ে পরীক্ষা করুন: শত বা হাজার সারি, অদ্ভুত অক্ষর, খালি কোয়েরি, খুব লম্বা কোয়েরি, এবং আপনি যদি সমর্থন করেন তবে অন্য ভাষাও।
সাধারণ ভুল
- পুরো টেবিল ব্রাউজারে লোড করা। ৫০ আইটেমে ঠিক আছে, ৫০,০০০-এ যন্ত্রণাদায়ক — এবং এতে প্রতিটি রেকর্ড প্রকাশ পায়, যেগুলো ব্যবহারকারীর দেখার কথা নয়।
- অনুমতি উপেক্ষা করা সার্চ। সার্চ একটি সাধারণ ফাঁস: কোয়েরিতে "শুধু আমার" বা "শুধু প্রকাশিত" শর্ত ভুলে গেলে একটি ব্যক্তিগত বা খসড়া রেকর্ড দেখা যায়।
- কাঁচা ব্যবহারকারীর ইনপুট থেকে SQL বানানো। সবসময় প্যারামিটারাইজড কোয়েরি ব্যবহার করুন। AI বিল্ডার সাধারণত তা করে, কিন্তু স্ট্রিং জোড়া লাগানো দেখলে যাচাই করুন।
- কোনো খালি-অবস্থা না থাকা। "কোনো ফলাফল নেই" একটি পরামর্শসহ (ফিল্টার পরিষ্কার করুন, বানান দেখুন) মানুষকে চলে যাওয়া থেকে ঠেকায়।
- কোনো ইনডেক্স না থাকা। পরীক্ষার ডাটায় সার্চ ভালো লাগে, আসল ডাটা বাড়লে ধীর হয়ে যায়।
- সরাসরি সার্চ সার্ভিসে লাফিয়ে যাওয়া। তখন আপনাকে আপনার ডাটার আরেকটি কপি সিঙ্কে রাখতে হয়, ডিলিট সামলাতে হয়, এবং আরেকটি কী সেট সুরক্ষিত রাখতে হয় — অনেক সময় কোনো দৃশ্যমান লাভ ছাড়াই।
- মোবাইল ভুলে যাওয়া। ফিল্টার ফোনের মাপে ফিট করতে হবে; ফিল্টার ড্রয়ার বা ভাঁজ করা প্যানেল সাধারণত সাইডবারের চেয়ে ভালো কাজ করে।
চেকলিস্ট
- আপনি জানেন কোন ফিল্ড সার্চ হয় এবং কোন ফিল্টার আছে
- সার্চ সার্ভারে চলে এবং পেজিনেটেড ফলাফল ফেরত দেয়
- কোয়েরি অ্যাপের বাকি অংশের মতো একই অনুমতি মেনে চলে
- ব্যবহারকারীর ইনপুট প্যারামিটার হিসেবে পাঠানো হয়, কখনো SQL-এর ভেতরে জোড়া লাগানো নয়
- সার্চের অবস্থা URL-এ থাকে
- টাইপ করা ডিবাউন্স করা
- যেসব কলামে সার্চ ও ফিল্টার হয় সেগুলো ইনডেক্স করা
- খালি, ফলাফল-নেই ও ত্রুটির অবস্থা স্পষ্ট
- বাস্তবসম্মত ডাটার পরিমাণ ও অগোছালো ইনপুটে পরীক্ষিত
Mythex-এ সার্চ যোগ করা
Mythex-এ তৈরি অ্যাপে ডাটা সাধারণত প্রজেক্টের নিজস্ব Postgres ডাটাবেসে থাকে, তাই ওপরের প্রম্পটগুলো দিয়ে শুরু করতে পারেন: প্রথমে প্যাটার্ন মেলানো, র্যাঙ্কিং দরকার হলে Postgres ফুল-টেক্সট সার্চ। আপনি যদি একটি হোস্টেড সার্চ ইঞ্জিন চান, নিজের অ্যাকাউন্ট ও কী আনুন, সেটি একটি প্রজেক্ট সিক্রেট হিসেবে রাখুন, এবং এজেন্টকে সার্ভার থেকে ইনডেক্স ও কোয়েরি করতে বলুন, যেমনটি যেকোনো API ইন্টিগ্রেট করুন-এ বলা আছে।
সার্চ অনেক অ্যাপের মূল অংশ: পুরো প্রোডাক্টের সঙ্গে এটি কীভাবে খাপ খায় তা দেখুন কীভাবে একটি ডিরেক্টরি ওয়েবসাইট বানাবেন, কীভাবে একটি জব বোর্ড বানাবেন এবং কীভাবে একটি মার্কেটপ্লেস বানাবেন।
প্রশ্নোত্তর
অ্যাপে সার্চ যোগ করার সবচেয়ে সহজ উপায় কী?
আপনার ডাটা যদি ডাটাবেসে থাকে, তবে একটি সার্ভার রুট যা কয়েকটি কলামে ছোট-বড় হাতের অক্ষর উপেক্ষা করে মিল খুঁজে সারি ফিল্টার করে, সেটিই সবচেয়ে সহজ শুরু। ব্রাউজারে ইতিমধ্যে লোড হওয়া ছোট তালিকার জন্য ব্রাউজারে ফিল্টার করা আরও সহজ।
সার্চের জন্য কি Algolia বা Elasticsearch লাগে?
সাধারণত প্রথমে লাগে না। Postgres ফুল-টেক্সট সার্চ শব্দ মেলানো, র্যাঙ্কিং এবং হাজার থেকে লক্ষ সারি ভালোভাবে সামলায়। হোস্টেড সার্চ ইঞ্জিনের মূল্য আছে যখন আপনার শক্তিশালী টাইপো-সহনশীলতা, বড় ডাটা জুড়ে টাইপ করার সময় তাৎক্ষণিক ফলাফল, বা উন্নত প্রাসঙ্গিকতা-টিউনিং দরকার।
টাইপো থাকলে সার্চ কেন ফলাফল পায় না?
সাধারণ মিল বা স্ট্যান্ডার্ড ফুল-টেক্সট সার্চ শব্দগুলো যেমন টাইপ করা হয়েছে (বা তাদের স্টেম) খোঁজে, তাই ভুল বানান মিলে না। আপনার ফাজি মিলের দরকার, যেমন Postgres-এর trigram similarity, বা টাইপো-সহনশীলতাসহ একটি সার্চ ইঞ্জিন।
সার্চ ব্রাউজারে চলবে নাকি সার্ভারে?
ছোট পাবলিক তালিকার বাইরে যেকোনো কিছুর জন্য সার্ভারে। সার্ভার-সাইড সার্চ স্কেল করে, অনুমতি মেনে চলে এবং প্রতিটি ভিজিটরের কাছে আপনার পুরো ডাটাসেট পাঠায় না।