🌐 Detecting your location…

2026 में Meilisearch के साथ वेब ऐप में खोज को कैसे कार्यान्वित करें

⏱️3 min read  ·  480 words

मेलिसर्च एक तेज़, ओपन-सोर्स खोज इंजन है जो न्यूनतम सेटअप के साथ त्वरित, टाइपो-सहिष्णु खोज प्रदान करता है – अधिकांश अनुप्रयोगों के लिए इलास्टिक्स खोज का एक सरल विकल्प। यह मार्गदर्शिका किसी वेब ऐप में इंस्टालेशन से लेकर फ्रंटएंड एकीकरण तक शक्तिशाली खोज जोड़ती है।

मेलिसर्च क्यों?

  • त्वरित खोज: उप-50 एमएस प्रतिक्रियाएँ, आपके टाइप करते ही परिणाम
  • टाइपो टॉलरेंस: बॉक्स से बाहर गलत वर्तनी के बावजूद परिणाम ढूँढता है
  • सरल सेटअप: इलास्टिक्स खोज से कहीं अधिक आसान – समझदार डिफ़ॉल्ट
  • खुला स्रोत: स्व-होस्टेबल और मुफ़्त, क्लाउड विकल्प के साथ
  • महान प्रासंगिकता: जटिल ट्यूनिंग के बिना अच्छे परिणाम

मेलिसर्च चल रहा है

# 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>
  );
}

सूचकांक को सिंक में रखना

// 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 और बॉक्स से बाहर फेसिंग प्रदान करता है। इस आधार पर चुनें कि क्या खोज यूएक्स गुणवत्ता अतिरिक्त सेवा को उचित ठहराती है।

प्रश्न: मैं खोज अनुक्रमणिका को अपने डेटाबेस के साथ कैसे समन्वयित रखूँ?
उत्तर: जब भी आपका डेटा बदलता है तो Meilisearch इंडेक्स को अपडेट करें – अपने ऐप के क्रिएट/अपडेट/डिलीट हैंडलर से addDocuments/updateDocuments/deleteDocument पर कॉल करें। बल्क सिंक के लिए, समय-समय पर पुन: अनुक्रमित करें। इंडेक्स आपके डेटाबेस से अलग है, इसलिए आपको उन्हें सिंक में रखना होगा।

प्रश्न: क्या फ्रंटएंड से खोजना सुरक्षित है?
उ: हाँ, यदि आप केवल-स्कोप्ड खोज एपीआई कुंजी (मास्टर कुंजी कभी नहीं) का उपयोग करते हैं। विशिष्ट अनुक्रमणिका के लिए केवल ‘खोज’ क्रिया के साथ एक कुंजी बनाएं और उसे फ्रंटएंड पर उपयोग करें। मास्टर कुंजी केवल सर्वर-साइड ही रहनी चाहिए, क्योंकि यह डेटा को संशोधित कर सकती है।

प्रश्न: क्या मेलिसर्च बड़े डेटासेट को संभाल सकता है?
उत्तर: यह अच्छे प्रदर्शन के साथ लाखों दस्तावेज़ों को अच्छी तरह से संभालता है। अत्यधिक बड़े पैमाने (सैकड़ों लाखों) या जटिल विश्लेषण के लिए, इलास्टिक्स खोज अधिक उपयुक्त हो सकती है। अधिकांश वेब ऐप्स के लिए – ई-कॉमर्स, सामग्री, SaaS – Meilisearch का पैमाना पर्याप्त से अधिक है।

निष्कर्ष

Meilisearch एक वेब ऐप में तेज़, टाइपो-सहिष्णु खोज को जोड़ने को उल्लेखनीय रूप से सरल बनाता है – अधिकांश आवश्यकताओं के लिए Elasticsearch की तुलना में कहीं अधिक आसान। सेटअप:Meilisearch (डॉकर) चलाएं, अपने दस्तावेज़ों को अनुक्रमित करें, खोजने योग्य और फ़िल्टर करने योग्य विशेषताओं को कॉन्फ़िगर करें, और एक डिबाउंस इनपुट और एक स्कोप्ड सर्च-ओनली एपीआई कुंजी के साथ फ्रंटएंड पर त्वरित खोज को एकीकृत करें. अपने ऐप के डेटा परिवर्तन हैंडलर से इसे अपडेट करके इंडेक्स को सिंक में रखें। आपको न्यूनतम कॉन्फ़िगरेशन के साथ उप-50 एमएस खोज, टाइपो टॉलरेंस, फ़ेसटिंग और बॉक्स से बाहर फ़िल्टरिंग मिलती है। ई-कॉमर्स, सामग्री साइटों और अधिकांश SaaS ऐप्स के लिए, Meilisearch भारी खोज बुनियादी ढांचे की जटिलता के बिना एक उत्कृष्ट खोज अनुभव प्रदान करता है – जब आप जल्दी से गुणवत्तापूर्ण खोज UX चाहते हैं तो यह एक बढ़िया विकल्प है।

MD Rafikul Islam

Written by

MD Rafikul Islam is a software developer and the editor of TechPulse. He writes about developer tooling, hardware, and the practical decisions that come up in day-to-day engineering work — which laptop to buy, which framework to commit to, why a build broke at 2am. He tests the tools he writes about and says plainly when something is not worth the money. Corrections and corrections requests are welcome at rony.yf25@gmail.com.

✍️ Leave a Comment

Your email address will not be published. Required fields are marked *

🌐 Read in:🇬🇧 English🇩🇪 Deutsch🇧🇷 Português🇸🇦 العربية🇮🇳 हिन्दी🇧🇩 বাংলা