मुख्य सामग्री पर जाएँ

MongoDB में एम्बेडिंग्स को स्टोर और क्वेरी कैसे करें

Atlas Vector Search का उपयोग करके MongoDB में एम्बेडिंग्स को स्टोर, इंडेक्स और क्वेरी करना सीखें।
· 8 मि॰ पढ़ें

AI के साथ खोजें

LLMs और सेमांटिक सर्च के उभार ने सर्च, रिकमेंडेशन और रिट्रीवल सिस्टम बनाने के तरीके को बुनियादी रूप से बदल दिया है। पारंपरिक कीवर्ड सर्च—चाहे SQL LIKE, Lucene inverted, या फुल-टेक्स्ट इंडेक्स के जरिए हो—अब तब पर्याप्त नहीं रह गया है जब उपयोगकर्ता प्राकृतिक भाषा की समझ की उम्मीद करते हैं।

यहीं पर embeddings और vector databases तस्वीर में आते हैं।

MongoDB ने इस क्षेत्र में Atlas Vector Search के साथ तेजी से प्रगति की है, जो डेवलपर्स को डॉक्यूमेंट्स + मेटाडेटा + वेक्टर के लिए एक ही डेटाबेस देता है—वह भी एक ही API के तहत। इस गाइड में, हम ये कवर करेंगे:

  • MongoDB क्या है।
  • क्वेरी एम्बेडिंग्स क्या होती हैं और ये क्यों महत्वपूर्ण हैं।
  • एम्बेडिंग्स कब उपयोग करनी चाहिए।
  • MongoDB में एम्बेडिंग्स कैसे स्टोर करें।
  • Python का उपयोग करके उन्हें कैसे जेनरेट और क्वेरी करें।

यह ट्यूटोरियल हैंड्स-ऑन है और आपके retrieval-augmented generation (RAG), समानता सर्च या रिकमेंडेशन पाइपलाइन में तुरंत जोड़ने के लिए तैयार है।

MongoDB क्या है?

MongoDB एक डाक्युमेंट-ओरिएंटेड NoSQL डेटाबेस है जो डेटा को लचीले BSON डॉक्यूमेंट्स में स्टोर करता है—BSON JavaScript Object Notation (JSON) का बाइनरी एन्कोडेड रूप है—एक टेक्स्टुअल ऑब्जेक्ट नोटेशन जो वेब-आधारित एप्लिकेशंस में डेटा ट्रांसमिट और स्टोर करने के लिए व्यापक रूप से उपयोग होता है। कठोर रिलेशनल डेटाबेस के विपरीत, MongoDB स्कीमा इवोल्यूशन को सरल बनाता है और प्रदान करता है:

  • हॉरिजॉन्टल स्केलेबिलिटी (शार्डिंग)।
  • समृद्ध एग्रीगेशन फ्रेमवर्क।
  • फुल-टेक्स्ट सर्च।
  • वेक्टर सर्च।
  • टाइम सीरीज़ कलेक्शंस।
  • स्कीमा लचीलापन।

MongoDB Atlas—पूरी तरह से प्रबंधित क्लाउड सेवा—इसे आगे बढ़ाती है:

  • Atlas Search (Lucene पर निर्मित)।
  • Atlas Vector Search (HNSW इंडेक्सिंग के जरिए सेमांटिक सर्च)।
  • ऑटोमेटिक स्केलिंग, बैकअप, सुरक्षा और मॉनिटरिंग।

AI वर्कलोड्स के लिए MongoDB एक मजबूत विकल्प बन गया है क्योंकि वेक्टर अक्सर मेटाडेटा के साथ रहते हैं, और MongoDB Atlas इसे एक ही सिस्टम में समेट देता है।

Embeddings क्या हैं और हम Query Embeddings का उपयोग क्यों करते हैं?

जब आप AI एप्लिकेशंस में सर्च या रिट्रीवल के साथ काम करते हैं, तो जिन शुरुआती अवधारणाओं से आप रूबरू होते हैं, उनमें से एक है embeddings। 

एक एम्बेडिंग मूलतः एक संख्यात्मक निरूपण है, फ्लोटिंग-पॉइंट मानों की एक लंबी सूची, जो किसी टेक्स्ट (या इमेज, ऑडियो, आदि) का अर्थ कैद करती है। सटीक शब्द देखने के बजाय, एम्बेडिंग्स टेक्स्ट को एक वेक्टर स्पेस में मैप करती हैं जहां समान विचार एक-दूसरे के करीब आ जाते हैं। उदाहरण के लिए, तीन अलग-अलग उपयोगकर्ता कथनों पर विचार करें:

  • Billing issue
  • Payment error
  • Salary not credited

भले ही शब्द अलग हों, तीनों एक वित्तीय समस्या का वर्णन करते हैं। एक अच्छा एम्बेडिंग मॉडल इन टेक्स्ट्स को वेक्टर स्पेस में एक-दूसरे के पास रखता है, जिससे आप कीवर्ड्स के बजाय अर्थ के आधार पर उन्हें रिट्रीव कर सकते हैं।

यह तब विशेष रूप से महत्वपूर्ण हो जाता है जब उपयोगकर्ता सर्च करता है। जो टेक्स्ट वह टाइप करता है—“मेरी सैलरी लेट क्यों है?”—उसे भी एक एम्बेडिंग में बदला जाता है। इस नए वेक्टर को query embedding कहा जाता है। इसके बाद आप इस क्वेरी वेक्टर की तुलना सभी स्टोर की गई एम्बेडिंग्स से करते हैं ताकि अर्थ की दृष्टि से समान डॉक्यूमेंट्स मिल सकें। वेक्टर जितने पास होंगे, परिणाम उतना ही प्रासंगिक होगा।

MongoDB Atlas इस पूरे वर्कफ़्लो को Atlas Vector Search के साथ बेहद आसान बना देता है। अपने डॉक्यूमेंट्स और उनकी एम्बेडिंग्स को MongoDB कलेक्शन में स्टोर करने के बाद, Atlas एक vector index (अंदरूनी तौर पर HNSW का प्रयोग) बनाता है जो बड़े पैमाने पर समान डॉक्यूमेंट्स को जल्दी रिट्रीव कर सकता है। उदाहरण के लिए, अगर आप सपोर्ट आर्टिकल्स को उनकी एम्बेडिंग्स के साथ स्टोर करते हैं, तो ऐसी क्वेरी…

query = "Why isn't my salary showing up this month?"
query_vec = get_embedding(query) # Explained in below examples

…को सीधे MongoDB में उपयोग किया जा सकता है:

results = collection.aggregate([
    {
        "$vectorSearch": {
            "path": "embedding",
            "queryVector": query_vec,
            "index": "vector_index",
            "limit": 3
        }
    }
])

MongoDB अपने आप शीर्ष 3 सपोर्ट आर्टिकल्स लौटाएगा जिनकी एम्बेडिंग्स क्वेरी के सबसे करीब हैं—बिना किसी कीवर्ड मैचिंग या मैन्युअल स्कोरिंग के।

यही है MongoDB Atlas में एम्बेडिंग्स की ताकत: आप सिर्फ टेक्स्ट नहीं, अर्थ को स्टोर करते हैं, और आप सिर्फ शब्दों पर नहीं, मंशा पर क्वेरी करते हैं। यही बदलाव सेमांटिक सर्च, RAG सिस्टम्स, AI असिस्टेंट्स और इंटेलिजेंट नॉलेज बेस के लिए एम्बेडिंग्स को एक कोर बिल्डिंग ब्लॉक बनाता है।

Query Embeddings कब उपयोग करें

एम्बेडिंग्स का उपयोग तब करें जब आपको सेमांटिक समानता चाहिए, जैसे:

Retrieval-augmented generation (RAG)

  • अपने LLM को नॉलेज बेस से सटीक संदर्भ दें
  • भुरभुरी कीवर्ड सर्च को बदलें

ऐसे चैटबॉट्स जिन्हें गहरी समझ चाहिए

  • पोर्टल हेल्पडेस्क
  • कस्टमर सपोर्ट

प्रोडक्ट रिकमेंडेशन

  • “इस आइटम से मिलते-जुलते आइटम”

डॉक्यूमेंट या डुप्लिकेट डिटेक्शन

  • क्लस्टरिंग
  • टॉपिक ग्रूपिंग

जब कीवर्ड सर्च विफल हो

  • ऐसी क्वेरीज जैसे “salary credit delay” बनाम “payment processing issue”

इन परिस्थितियों में एम्बेडिंग्स का उपयोग न करें:

  • जब सटीक मिलान चाहिए (IDs, चालान नंबर)।
  • जब आपका डेटासेट बहुत छोटा हो (सिंपल सर्च काम करेगी)।
  • जब आपको संख्यात्मक फ़िल्टरिंग/तुलना चाहिए (यह काम मेटाडेटा से करना चाहिए)।

MongoDB में Embeddings कैसे स्टोर करें

MongoDB की खूबसूरती यह है कि एम्बेडिंग्स स्वाभाविक रूप से डॉक्यूमेंट्स के भीतर फिट हो जाती हैं। आप उन्हें फ्लोट्स की एरे के रूप में स्टोर कर देते हैं।

उदाहरण डॉक्यूमेंट स्कीमा

यहाँ एक सामान्य डॉक्यूमेंट संरचना है:

{
  "_id": "uuid-123",
  "text": "This is a sample document about MongoDB vector search.",
  "embedding": [0.123, -0.241, 0.998, ...],
  "tags": ["mongodb", "vector", "ai"],
  "createdAt": "2025-01-01T10:20:00Z"
}

ध्यान रखने योग्य महत्वपूर्ण बातें:

  • किसी कलेक्शन में हर एम्बेडिंग का आयाम (डाइमेंशनलिटी) एक जैसा होना चाहिए।
  • एम्बेडिंग्स आदर्श रूप से float32 में स्टोर होनी चाहिए (MongoDB अंदरूनी तौर पर float64 में कन्वर्ट करेगा)।
  • यदि आपके डॉक्यूमेंट लंबे हैं, तो एम्बेडिंग से पहले उन्हें चंक करें।
  • मेटाडेटा अलग से स्टोर करें—टैग, श्रेणी, URL, टाइमस्टैम्प्स आदि। इससे हाइब्रिड सर्च शक्तिशाली बनती है।

MongoDB में Vector Index बनाना (महत्वपूर्ण चरण)

एम्बेडिंग्स को स्टोर या क्वेरी करने से पहले, आपको MongoDB Atlas में एक vector search index बनाना होगा।

MongoDB Atlas में जाएँ: Atlas → Database → Collections → Search → Create Search Index

ऐसी परिभाषा का उपयोग करें:

{
  "fields": [
    {
      "type": "vector",
      "path": "embedding",
      "numDimensions": 1536,
      "similarity": "cosine"
    }
  ]
}

यह MongoDB को बताता है:

  • फ़ील्ड embedding में वेक्टर हैं।
  • हर वेक्टर में 1536 आयाम हैं।
  • रैंकिंग के लिए कोसाइन समानता का उपयोग करें।

यह इंडेक्स सभी वेक्टर सर्च क्वेरीज को शक्ति देता है।

MongoDB में नैटिव वेक्टर सर्च क्षमताएँ शामिल हैं, जिनमें समर्थन है:

  • कोसाइन समानता।
  • युक्लिडियन दूरी।
  • dotProduct स्कोरिंग।

अपने एम्बेडिंग मॉडल के आधार पर चुनें—लेकिन हमें कैसे पता चलेगा कि क्या चुनना है? आइए विस्तार से समझें।

कोसाइन समानता

यह क्या मापता है

यह मापता है कि दो वेक्टर कितने संरेखित हैं—अर्थात् उनके बीच का कोण। यह परिमाण को नज़रअंदाज़ करता है और केवल दिशा पर ध्यान देता है।

बोध

  • यदि दो वेक्टर एक ही दिशा में इशारा करें → समानता 1 के करीब
  • विपरीत दिशाएँ → –1
  • लंबवत (असंबंधित) → 0

कब उपयोग करें

कोसाइन का उपयोग तब करें जब परिमाण मायने नहीं रखता, केवल पैटर्न या अवधारणा महत्वपूर्ण हो।

सामान्य उपयोग

  • टेक्स्ट एम्बेडिंग्स/NLP
  • सेमांटिक सर्च
  • अर्थ-आधारित रिकमेंडेशन सिस्टम, स्केल-आधारित नहीं

अधिकांश एम्बेडिंग मॉडलों के लिए कोसाइन सबसे सुरक्षित डिफ़ॉल्ट है।

युक्लिडियन दूरी

यह क्या मापता है

यह स्पेस में दो वेक्टरों के बीच सीधी रेखा की दूरी मापता है।

बोध

  • कम दूरी → वेक्टर समान
  • अधिक दूरी → वेक्टर दूर

कब उपयोग करें

युक्लिडियन का उपयोग तब करें जब संपूर्ण मान और परिमाण मायने रखते हों, केवल दिशा नहीं।

सामान्य उपयोग

  • इमेज एम्बेडिंग्स
  • भौतिक माप/सेंसर डेटा
  • K-means जैसे क्लस्टरिंग एल्गोरिद्म (जो अंदरूनी तौर पर युक्लिडियन का उपयोग करते हैं)

यदि आपका डेटा स्वाभाविक रूप से ज्यामितीय स्पेस में रहता है (जैसे, पिक्सेल इंटेंसिटी), तो युक्लिडियन अक्सर अधिक उपयुक्त होता है।

डॉट प्रोडक्ट

यह क्या मापता है

यह समानता और परिमाण के संयोजन को मापता है। 

गणितीय रूप से: dot(u, v) = |u| × |v| × cos(θ)

बोध

  • अधिक परिमाण और संरेखण → बड़ा स्कोर
  • वेक्टर की लंबाई के प्रति संवेदनशील
  • स्वतः सामान्यीकृत नहीं

कब उपयोग करें

डॉट प्रोडक्ट का उपयोग तब करें जब आप चाहते हैं कि लंबे वेक्टर अधिक प्रभाव डालें या जब एम्बेडिंग मॉडल को डॉट प्रोडक्ट को ध्यान में रखते हुए प्रशिक्षित किया गया हो।

सामान्य उपयोग

  • ऐसे बड़े भाषा मॉडल एम्बेडिंग्स जो इनर प्रोडक्ट स्कोरिंग मानते हैं
  • न्यूरल नेटवर्क समानता लेयर्स
  • ऐसे रिकमेंडेशन मॉडल जहां फीचर्स की “ताकत” सार्थक हो

त्वरित नियम

मेट्रिक

किसके लिए उपयुक्त

कब बचें

कोसाइन

टेक्स्ट, सेमांटिक सर्च, सामान्य एम्बेडिंग्स

जब परिमाण मायने रखे

युक्लिडियन

इमेजेज, ज्यामितीय फीचर्स, क्लस्टरिंग

जब डेटा का स्केल मनमाना हो

डॉट प्रोडक्ट

इनर प्रोडक्ट से प्रशिक्षित मॉडल, recsys

जब परिमाण समानता को विकृत करें

MongoDB में एम्बेडिंग्स जेनरेट, स्टोर और क्वेरी करें (Python ट्यूटोरियल)

आइए इसे ऐसे समझें जैसे हम एक वास्तविक सिस्टम बना रहे हों।

डिपेंडेंसीज़ इंस्टॉल करें

pip install pymongo openai

एम्बेडिंग्स जेनरेट करें

OpenAI का उपयोग करते हुए (अपनी पसंद के किसी भी एम्बेडिंग प्रोवाइडर से बदल सकते हैं):

import os
from openai import OpenAI

os.environ["OPENAI_API_KEY"] = "your_api_key_here"
client = OpenAI()

def get_embedding(text: str):
    response = client.embeddings.create(
        model="text-embedding-3-small",
        input=text
    )
    return response.data[0].embedding

MongoDB से कनेक्ट करें और डॉक्यूमेंट्स इंसर्ट करें

OpenAI का उपयोग करते हुए (अपनी पसंद के किसी भी एम्बेडिंग प्रोवाइडर से बदल सकते हैं):

from pymongo import MongoClient
import uuid

mongo = MongoClient("<MONGODB_ATLAS_URI>")
db = mongo["vector_db"]
collection = db["documents"]

text = "This is a sample document about MongoDB vector search."
embedding = get_embedding(text)

document = {
    "_id": str(uuid.uuid4()),
    "text": text,
    "embedding": embedding,
    "tags": ["mongodb", "search"],
}

collection.insert_one(document)
print("Document inserted successfully!")

इस बिंदु पर, आपका डेटा सेमांटिक सर्च के लिए तैयार है।

MongoDB में एम्बेडिंग्स क्वेरी करना

अब आती है मजेदार बात: वेक्टर क्वेरी का उपयोग करके समान डॉक्यूमेंट्स रिट्रीव करना। MongoDB एग्रीगेशन पाइपलाइन में $vectorSearch का उपयोग करता है।

क्वेरी वेक्टर जेनरेट करें

from pymongo import MongoClient
query = "How does MongoDB handle semantic search?"
query_vec = get_embedding(query)

वेक्टर सर्च करें (क्वेरी एम्बेडिंग्स)

results = collection.aggregate([
    {
        "$vectorSearch": {
            "index": "vector_index",
            "path": "embedding",
            "queryVector": query_vec,
            "numCandidates": 100,
            "limit": 5,
            "similarity": "cosine"
        }
    },
    {
        "$project": {
            "text": 1,
            "score": {"$meta": "vectorSearchScore"}
        }
    }
])

for r in results:
    print(r)

यह पाँच सबसे अधिक सेमांटिक रूप से समान डॉक्यूमेंट्स लौटाता है।

यह उन RAG पाइपलाइनों के लिए शक्तिशाली है जहाँ आपको सेमांटिक सर्च चाहिए।

उपरोक्त क्वेरी का चरण-दर-चरण विवरण

$vectorSearch → ऐसे डॉक्यूमेंट्स ढूँढता है जिनका embedding फ़ील्ड दिए गए queryVector के सबसे करीब है, चुने गए सिमिलैरिटी मेट्रिक के आधार पर

numCandidates → इंजन शीर्ष परिणाम चुनने से पहले कितने संभावित मेलों पर विचार करे

limit → लौटाए जाने वाले अंतिम समान परिणामों की संख्या

$project → मूल टेक्स्ट के साथ एक विशेष फ़ील्ड score लौटाता है

score फ़ील्ड क्या है?

MongoDB Atlas Vector Search एक विशेष मेटाडेटा फ़ील्ड लौटाता है, "score": {"$meta": "vectorSearchScore"}, जो आपको बताता है कि कोई स्टोर किया गया वेक्टर आपके क्वेरी वेक्टर से कितना समान है।

स्कोर का अर्थ आपके चुने हुए सिमिलैरिटी मेट्रिक पर निर्भर करता है, जैसा कि नीचे समझाया गया है:

सिमिलैरिटी मेट्रिक

स्कोर का मतलब

उच्च स्कोर = अधिक समान?

स्कोर रेंज

cosine

वेक्टरों के बीच कोणीय समानता

हाँ

–1 से +1

euclidean

निगेटिव L2 दूरी

नहीं—0 के करीब = अधिक समान

–∞ से 0

dotProduct

वेक्टर परिमाण संरेखण

हाँ

–∞ से +∞

सर्वोत्तम प्रक्रियाएँ

  • लंबे डॉक्यूमेंट्स को चंक करें (प्रत्येक 300–500 टोकन): बेहतर प्रासंगिकता + लंबे ब्लॉब्स की एम्बेडिंग से बचाव
  • मेटाडेटा अलग से स्टोर करें: फ़िल्टरिंग और रैंकिंग में मदद मिलती है
  • बैच में एम्बेडिंग जेनरेशन करें: थ्रूपुट बेहतर होता है और मॉडल लागत घटती है
  • अपने मॉडल में float32 एम्बेडिंग्स उपयोग करें: MongoDB अंदरूनी तौर पर float64 उपयोग करता है पर float32 एरे स्वीकार करता है
  • केवल वेक्टर फ़ील्ड को इंडेक्स करें: इंडेक्स में अतिरिक्त फ़ील्ड्स मेमोरी और लेटेंसी बढ़ाते हैं

सामान्य गलतियाँ जिनसे बचें

समस्या

क्यों होती है

डाइमेंशन मिसमैच

क्वेरी वेक्टर डाइमेंशन ≠ इंडेक्स डाइमेंशन

अप्रासंगिक परिणाम

स्टोरेज और क्वेरी के लिए अलग-अलग मॉडल्स का उपयोग

धीमा सर्च

बहुत अधिक numCandidates या बड़े क्लस्टर की आवश्यकताएँ

डॉक्यूमेंट बहुत बड़ा

16MB डॉक्यूमेंट सीमा

गलत सिमिलैरिटी मेट्रिक

मॉडल कोसाइन के लिए प्रशिक्षित है पर डॉट प्रोडक्ट उपयोग हो रहा है

अंतिम विचार

एम्बेडिंग्स और सेमांटिक सर्च अब आधुनिक AI प्रोडक्ट्स की बुनियाद हैं। चाहे आप चैटबॉट, RAG पाइपलाइन, रिकमेंडेशन इंजन या स्मार्ट सर्च लेयर बना रहे हों, आपको वेक्टर को स्टोर और कुशलता से क्वेरी करने का एक विश्वसनीय तरीका चाहिए।

MongoDB आपको एक एकीकृत प्लेटफ़ॉर्म देता है जहाँ:

  • आपका टेक्स्ट रहता है।
  • आपका मेटाडेटा रहता है।
  • आपकी एम्बेडिंग्स रहती हैं।
  • आपकी वेक्टर सर्च चलती है।
  • सब कुछ साथ में स्केल होता है।

यह अलग-अलग डेटाबेस को संभालने की जटिलता से बचाता है और आपको इन्फ्रास्ट्रक्चर के बजाय प्रोडक्ट क्षमताओं के निर्माण पर ध्यान केंद्रित करने देता है।

FAQs

यदि मैं एम्बेडिंग्स के लिए MongoDB उपयोग करता/करती हूँ, तो क्या मुझे अलग वेक्टर डेटाबेस की आवश्यकता है?

नहीं। MongoDB Atlas Vector Search बिल्ट-इन है, इसलिए आप डॉक्यूमेंट्स, मेटाडेटा और वेक्टर को एक ही जगह स्टोर कर सकते हैं, Pinecone या Milvus जैसे अलग वेक्टर DB का उपयोग किए बिना।

MongoDB में मुझे किस एम्बेडिंग डाइमेंशनलिटी का उपयोग करना चाहिए?

अपने एम्बेडिंग मॉडल द्वारा दी गई डाइमेंशनलिटी का उपयोग करें (जैसे, 768 या 1536)। किसी कलेक्शन के सभी डॉक्यूमेंट्स को वेक्टर इंडेक्स के समान डाइमेंशन का उपयोग करना चाहिए।

क्या MongoDB हाइब्रिड सर्च (मेटाडेटा + वेक्टर सर्च) कर सकता है?

आप $match के साथ फ़िल्टर कर सकते हैं और फिर उसी एग्रीगेशन पाइपलाइन में $vectorSearch लगा सकते हैं—RAG और रिकमेंडेशन सिस्टम्स के लिए आदर्श।

क्या बड़े पैमाने पर वेक्टर सर्च वर्कलोड्स के लिए MongoDB उपयुक्त है?

हाँ। MongoDB Atlas Search में HNSW-आधारित इंडेक्सिंग का उपयोग करता है, जो मिलियनों डॉक्यूमेंट्स के लिए अच्छी तरह स्केल होता है। थ्रूपुट इंडेक्स आकार, क्लस्टर टियर और वर्कलोड पैटर्न पर निर्भर करता है।

क्या मैं MongoDB के साथ कोई भी एम्बेडिंग मॉडल उपयोग कर सकता/सकती हूँ?

बिल्कुल। MongoDB मॉडल-एग्नॉस्टिक है। आप OpenAI, HuggingFace, Cohere, लोकल मॉडल्स या कस्टम एम्बेडिंग्स का उपयोग कर सकते हैं—बशर्ते डाइमेंशन इंडेक्स से मेल खाते हों।

Nilesh Soni

लेखक

Nilesh Soni

स्टाफ सॉफ्टवेयर इंजीनियर @ Uber

विषय