মেলিসার্চ একটি দ্রুত, ওপেন-সোর্স সার্চ ইঞ্জিন যা ন্যূনতম সেটআপ সহ তাত্ক্ষণিক, টাইপো-সহনশীল অনুসন্ধান সরবরাহ করে — বেশিরভাগ অ্যাপ্লিকেশনের জন্য ইলাস্টিকসার্চের একটি সহজ বিকল্প৷ এই নির্দেশিকাটি একটি ওয়েব অ্যাপে ইনস্টলেশন থেকে ফ্রন্টএন্ড ইন্টিগ্রেশন পর্যন্ত শক্তিশালী অনুসন্ধান যোগ করে।
📋 Table of Contents
- কেন Meilisearch?
- ইনডেক্সিং ডেটা
- মৌলিক অনুসন্ধান
- অনুসন্ধানযোগ্য এবং ফিল্টারযোগ্য ক্ষেত্রগুলি কনফিগার করা হচ্ছে
- ফিল্টারিং এবং ফেসটিং
- ফ্রন্টএন্ড ইন্টিগ্রেশন (তাত্ক্ষণিক অনুসন্ধান)
- সিঙ্কে সূচক রাখা
- নিরাপত্তা: স্কোপড API কী ব্যবহার করুন
- প্রায়শই জিজ্ঞাসিত প্রশ্ন
- প্রশ্নঃ মেইলিসার্চ নাকি ইলাস্টিকসার্চ?
- Meilisearch একটি ওয়েব অ্যাপে দ্রুত, টাইপো-সহনশীল অনুসন্ধান যোগ করাকে অসাধারণভাবে সহজ করে তোলে – বেশিরভাগ প্রয়োজনের জন্য ইলাস্টিক সার্চের চেয়ে অনেক সহজ। সেটআপ:
কেন Meilisearch?
- তাত্ক্ষণিক অনুসন্ধান: সাব-50ms প্রতিক্রিয়া, আপনি টাইপ করার সাথে সাথে ফলাফল
- টাইপো সহনশীলতা: বাক্সের বাইরে ভুল বানান থাকা সত্ত্বেও ফলাফল খুঁজে পায় সহজ সেটআপ:
- ইলাস্টিকসার্চের চেয়ে অনেক সহজ — সংবেদনশীল ডিফল্টওপেন সোর্স:
- স্ব-হোস্টেবল এবং বিনামূল্যে, একটি ক্লাউড বিকল্পের সাথেমহান প্রাসঙ্গিকতা:
- জটিল টিউনিং ছাড়াই ভালো ফলাফলমেলিসার্চ চলছে
ইনডেক্সিং ডেটা
# Run with Docker (easiest)
docker run -d --name meilisearch -p 7700:7700 \
-e MEILI_MASTER_KEY="your-master-key" \
getmeili/meilisearch:latest
# Verify it's running
curl http://localhost:7700/health
# {"status":"available"}
মৌলিক অনুসন্ধান
npm install meilisearch
import { MeiliSearch } from 'meilisearch';
const client = new MeiliSearch({
host: 'http://localhost:7700',
apiKey: 'your-master-key',
});
// Create an index and add documents
const index = client.index('products');
await index.addDocuments([
{ id: 1, name: 'Wireless Keyboard', category: 'Peripherals', price: 89 },
{ id: 2, name: 'Mechanical Keyboard', category: 'Peripherals', price: 129 },
{ id: 3, name: 'USB-C Hub', category: 'Accessories', price: 45 },
]);
// Each document needs a unique 'id' field (or configure the primary key)
অনুসন্ধানযোগ্য এবং ফিল্টারযোগ্য ক্ষেত্রগুলি কনফিগার করা হচ্ছে
// Simple search - typo-tolerant automatically
const results = await index.search('keybord'); // note the typo
console.log(results.hits);
// Still finds both keyboards despite the misspelling
// Search with options
const results = await index.search('keyboard', {
limit: 20,
attributesToHighlight: ['name'], // highlight matches
attributesToRetrieve: ['id', 'name', 'price'],
});
ফিল্টারিং এবং ফেসটিং
// Set which fields are searchable (and their priority order)
await index.updateSearchableAttributes([
'name', // highest priority
'category',
'description',
]);
// Set filterable attributes for faceted filtering
await index.updateFilterableAttributes(['category', 'price']);
// Set sortable attributes
await index.updateSortableAttributes(['price']);
ফ্রন্টএন্ড ইন্টিগ্রেশন (তাত্ক্ষণিক অনুসন্ধান)
// Filter results
const results = await index.search('keyboard', {
filter: 'category = "Peripherals" AND price < 100',
});
// Faceted search - get counts per category
const results = await index.search('keyboard', {
facets: ['category'],
});
console.log(results.facetDistribution);
// { category: { Peripherals: 2, Accessories: 0 } }
// Sort results
const results = await index.search('keyboard', {
sort: ['price:asc'],
});
সিঙ্কে সূচক রাখা
// React example - search as you type
import { useState, useEffect } from 'react';
import { MeiliSearch } from 'meilisearch';
// Use a SEARCH-ONLY key on the frontend, never the master key
const client = new MeiliSearch({
host: 'https://search.example.com',
apiKey: 'search-only-key', // scoped key with search-only permissions
});
function Search() {
const [query, setQuery] = useState('');
const [results, setResults] = useState([]);
useEffect(() => {
if (!query) { setResults([]); return; }
const timer = setTimeout(async () => {
const res = await client.index('products').search(query, { limit: 10 });
setResults(res.hits);
}, 150); // debounce - avoid a request on every keystroke
return () => clearTimeout(timer);
}, [query]);
return (
<div>
<input value={query} onChange={e => setQuery(e.target.value)}
placeholder="Search..." />
<ul>
{results.map(hit => <li key={hit.id}>{hit.name}</li>)}
</ul>
</div>
);
}
নিরাপত্তা: স্কোপড API কী ব্যবহার করুন
// Update the index when your data changes
async function onProductCreated(product) {
await index.addDocuments([product]);
}
async function onProductUpdated(product) {
await index.updateDocuments([product]); // upserts by id
}
async function onProductDeleted(productId) {
await index.deleteDocument(productId);
}
// Call these from your app's create/update/delete handlers to keep
// search results current with your database.
প্রায়শই জিজ্ঞাসিত প্রশ্ন
// NEVER expose the master key to the frontend.
// Create a search-only key for client use:
const searchKey = await client.createKey({
actions: ['search'],
indexes: ['products'],
expiresAt: null,
});
// Use searchKey.key on the frontend - it can only search, not modify
প্রশ্নঃ মেইলিসার্চ নাকি ইলাস্টিকসার্চ?
উত্তর: ন্যূনতম সেটআপ সহ সরলতা, তাত্ক্ষণিক অনুসন্ধান এবং টাইপো সহনশীলতার জন্য মেলিসার্চ — বেশিরভাগ অ্যাপের জন্য দুর্দান্ত৷ খুব বড় স্কেল, জটিল বিশ্লেষণ এবং উন্নত বৈশিষ্ট্যগুলির জন্য ইলাস্টিক অনুসন্ধান। একটি সাধারণ ওয়েব অ্যাপে অনুসন্ধান যোগ করার জন্য, Meilisearch অনেক সহজ এবং যথেষ্ট।
প্রশ্ন: Meilisearch বা PostgreSQL ফুল-টেক্সট অনুসন্ধান?
উত্তর: PostgreSQL অনুসন্ধান অতিরিক্ত পরিকাঠামো এড়িয়ে যায় (আপনার বিদ্যমান ডাটাবেস ব্যবহার করে) এবং অনেক অ্যাপ ভালোভাবে পরিচালনা করে। Meilisearch একটি পৃথক পরিষেবা চালানো এবং ডেটা সিঙ্ক করার খরচে আরও ভাল টাইপো সহনশীলতা, তাত্ক্ষণিক অনুসন্ধান UX এবং বাক্সের বাইরে ফেসটিং অফার করে। সার্চ UX গুণমান অতিরিক্ত পরিষেবাকে ন্যায্যতা দেয় কিনা তার উপর ভিত্তি করে চয়ন করুন৷
প্রশ্নঃ আমি কিভাবে সার্চ ইনডেক্সকে আমার ডাটাবেসের সাথে সিঙ্কে রাখতে পারি?
উত্তর: যখনই আপনার ডেটা পরিবর্তিত হয় তখনই Meilisearch সূচক আপডেট করুন — আপনার অ্যাপের তৈরি/আপডেট/মুছুন হ্যান্ডলার থেকে addDocuments/updateDocuments/deleteDocument কল করুন। বাল্ক সিঙ্কের জন্য, পর্যায়ক্রমে পুনরায় সূচক করুন। সূচকটি আপনার ডাটাবেস থেকে আলাদা, তাই আপনাকে অবশ্যই সেগুলিকে সিঙ্কে রাখতে হবে৷
প্রশ্ন: ফ্রন্টএন্ড থেকে অনুসন্ধান করা কি নিরাপদ?
উত্তর: হ্যাঁ, যদি আপনি একটি স্কোপড সার্চ-অনলি API কী ব্যবহার করেন (মাস্টার কী কখনই নয়)। নির্দিষ্ট সূচীগুলির জন্য শুধুমাত্র ‘অনুসন্ধান’ ক্রিয়া সহ একটি কী তৈরি করুন এবং ফ্রন্টএন্ডে এটি ব্যবহার করুন। মাস্টার কী শুধুমাত্র সার্ভার-সাইডে থাকতে হবে, কারণ এটি ডেটা পরিবর্তন করতে পারে।
প্রশ্ন: Meilisearch বড় ডেটাসেটগুলি পরিচালনা করতে পারে?
উত্তর: এটি ভাল কর্মক্ষমতা সহ লক্ষ লক্ষ নথি ভালভাবে পরিচালনা করে। অত্যন্ত বড় আকারের (শত লক্ষ) বা জটিল বিশ্লেষণের জন্য, ইলাস্টিকসার্চ আরও উপযুক্ত হতে পারে। বেশিরভাগ ওয়েব অ্যাপের জন্য — ই-কমার্স, বিষয়বস্তু, SaaS — মেলিসার্চ পর্যাপ্ত পরিমাণের চেয়ে বেশি স্কেল করে।
উপসংহার
Meilisearch একটি ওয়েব অ্যাপে দ্রুত, টাইপো-সহনশীল অনুসন্ধান যোগ করাকে অসাধারণভাবে সহজ করে তোলে – বেশিরভাগ প্রয়োজনের জন্য ইলাস্টিক সার্চের চেয়ে অনেক সহজ। সেটআপ:
মেইলিসার্চ (ডকার) চালান, আপনার নথিগুলিকে সূচী করুন, অনুসন্ধানযোগ্য এবং ফিল্টারযোগ্য বৈশিষ্ট্যগুলি কনফিগার করুন এবং একটি ডিবাউন্সড ইনপুট এবং একটি স্কোপড অনুসন্ধান-শুধু API কী সহ ফ্রন্টএন্ডে তাত্ক্ষণিক অনুসন্ধানকে একীভূত করুন. আপনার অ্যাপের ডেটা পরিবর্তন হ্যান্ডলার থেকে আপডেট করে সূচকটিকে সিঙ্কে রাখুন। আপনি ন্যূনতম কনফিগারেশন সহ বাক্সের বাইরে সাব-50ms সার্চ, টাইপো টলারেন্স, ফেসটিং এবং ফিল্টারিং পাবেন। ই-কমার্স, বিষয়বস্তু সাইট এবং বেশিরভাগ SaaS অ্যাপের জন্য, Meilisearch ভারী অনুসন্ধান পরিকাঠামোর জটিলতা ছাড়াই একটি চমৎকার অনুসন্ধান অভিজ্ঞতা প্রদান করে — আপনি যখন দ্রুত UX মানসম্পন্ন অনুসন্ধান করতে চান তখন একটি দুর্দান্ত পছন্দ।. আপনার অ্যাপের ডেটা পরিবর্তন হ্যান্ডলার থেকে আপডেট করে সূচকটিকে সিঙ্কে রাখুন। আপনি ন্যূনতম কনফিগারেশন সহ বাক্সের বাইরে সাব-50ms সার্চ, টাইপো টলারেন্স, ফেসটিং এবং ফিল্টারিং পাবেন। ই-কমার্স, বিষয়বস্তু সাইট এবং বেশিরভাগ SaaS অ্যাপের জন্য, Meilisearch ভারী অনুসন্ধান পরিকাঠামোর জটিলতা ছাড়াই একটি চমৎকার অনুসন্ধান অভিজ্ঞতা প্রদান করে — আপনি যখন দ্রুত UX মানসম্পন্ন অনুসন্ধান করতে চান তখন একটি দুর্দান্ত পছন্দ।
🔗 Share this article
✍️ Leave a Comment