इंडेक्स मैनेज करना

इस पेज पर, इंडेक्स मैनेज करने का तरीका बताया गया है. इंडेक्स के बारे में ज़्यादा जानने के लिए, इंडेक्स की खास जानकारी देखें.

शुरू करने से पहले

Cloud Firestore में इंडेक्स बनाने से पहले, पक्का करें कि आपको इनमें से कोई भूमिका असाइन की गई हो:

  • roles/datastore.owner
  • roles/datastore.indexAdmin
  • roles/editor
  • roles/owner

कोई भूमिका असाइन करने के लिए, कोई एक भूमिका असाइन करना लेख पढ़ें. Cloud Firestore की भूमिकाओं और उनसे जुड़ी अनुमतियों के बारे में ज़्यादा जानने के लिए, पहले से तय भूमिकाएं लेख पढ़ें.

अगर आपने कस्टम भूमिकाएं तय की हैं, तो इंडेक्स बनाने के लिए ये सभी अनुमतियां असाइन करें:

  • datastore.indexes.create
  • datastore.indexes.delete
  • datastore.indexes.get
  • datastore.indexes.list
  • datastore.indexes.update

इंडेक्स बनाना

इंडेक्स बनाने के लिए, यह तरीका अपनाएं:

MongoDB API

इंडेक्स बनाने के लिए, createIndex() तरीके का इस्तेमाल करें. उदाहरण के लिए:

  •   db.restaurants.createIndex({"cuisine" : 1})
      
  •   db.restaurants.createIndex({"cuisine" : 1}, {sparse: true})
      
  • db.runCommand() के साथ इंडेक्स बनाने की सुविधा भी काम करती है. हालांकि, इसके लिए ज़्यादा से ज़्यादा एक इंडेक्स बनाया जा सकता है.

      db.runCommand({"createIndexes":"restaurant", "indexes": [{"key": {"cuisine":1}, "name": "cuisine_index"}]})
      

इन सीमाओं का ध्यान रखें:

  • एक अनुरोध में सिर्फ़ एक इंडेक्स बनाया जा सकता है. db.collection.createIndexes() का इस्तेमाल नहीं किया जा सकता.
  • MongoDB API की मदद से इंडेक्स बनाने के लिए, ऑडिट लॉग में google.firestore.admin.v1.FirestoreAdmin.CreateIndex तरीके का इस्तेमाल किया जाता है.
  • इंडेक्स के लिए इस्तेमाल किए जा सकने वाले विकल्पों के बारे में जानने के लिए, इंडेक्स और इंडेक्स प्रॉपर्टी देखें.
Firebase कंसोल
  1. Firebase कंसोल में, Firestore Database पेज पर जाएं.

    Firestore डेटाबेस पर जाएं

  2. डेटाबेस की सूची में से कोई डेटाबेस चुनें.
  3. इंडेक्स टैब में, इंडेक्स बनाएं पर क्लिक करें.
  4. कलेक्शन आईडी डालें.
  5. एक या उससे ज़्यादा फ़ील्ड पाथ जोड़ें और हर एक के लिए इंडेक्स का विकल्प चुनें.
  6. फ़ील्ड की मौजूदगी का कोई विकल्प चुनें. जैसे, नॉन-स्पार्स या स्पार्स.
  7. आपके पास मल्टीकी इंडेक्स विकल्प को सेट करने का विकल्प होता है.
  8. बनाएं पर क्लिक करें.
  9. आपका नया इंडेक्स, इंडेक्स की सूची में दिखता है. साथ ही, Cloud Firestore आपका इंडेक्स बनाना शुरू कर देता है. इंडेक्स बनने के बाद, आपको इंडेक्स के बगल में हरे रंग का सही का निशान दिखेगा. अगर इंडेक्स नहीं बनाया गया है, तो इसकी संभावित वजहों के बारे में जानने के लिए, इंडेक्स बनाने से जुड़ी गड़बड़ियां देखें.
gcloud CLI

इंडेक्स बनाने के लिए, gcloud firestore indexes composite create कमांड का इस्तेमाल करें. api-scope को mongodb-compatible-api पर सेट करें.

gcloud firestore indexes composite create \
--database='DATABASE_ID' \
--collection-group=COLLECTION \
--field-config=FIELD_CONFIGURATION \
--query-scope=collection-group \
--density=dense \
--api-scope=mongodb-compatible-api

इनकी जगह ये डालें:

  • DATABASE_ID: डेटाबेस आईडी.
  • COLLECTION: कलेक्शन का नाम.
  • FIELD_CONFIGURATION: फ़ील्ड का कॉन्फ़िगरेशन. हर फ़ील्ड के लिए, --field-config=field-path= जोड़ें. उदाहरण के लिए:
        --field-config=field-path=user-id,order=descending \
        --field-config=field-path=score,order=descending
        

    इन फ़ील्ड को कॉन्फ़िगर करने के बारे में ज़्यादा जानने के लिए, --field-config देखें.

स्पार्स इंडेक्स बनाने के लिए, --density=sparse-any सेट करें.

मल्टीकी इंडेक्स बनाने के लिए, --multikey फ़्लैग जोड़ें.

यूनीक इंडेक्स बनाने के लिए, --unique फ़्लैग जोड़ें.

Terraform

google_firestore_index संसाधन का इस्तेमाल करें. साथ ही, api_scope को MONGODB_COMPATIBLE_API और query_scope को COLLECTION_GROUP पर सेट करें.

resource "google_firestore_index" "index" {
  database    = "DATABASE_ID"
  collection  = "COLLECTION"
  api_scope   = "MONGODB_COMPATIBLE_API"
  query_scope = "COLLECTION_GROUP"

  // You can include multiple field blocks
  fields {
    field_path = "FIELD_PATH"
    order      = "ORDER"
  }

  // Optional
  multikey = true
  density  = "DENSITY"
}

इनकी जगह ये डालें:

  • DATABASE_ID: आपके चुने गए डेटाबेस का डेटाबेस आईडी
  • COLLECTION: इंडेक्स किए जाने वाले कलेक्शन का नाम
  • FIELD_PATH: इंडेक्स किए जाने वाले फ़ील्ड का नाम
  • ORDER: ASCENDING या DESCENDING में से कोई एक
  • DENSITY: SPARSE_ANY या DENSE में से कोई एक

टेक्स्ट इंडेक्स बनाना

अगर आपको किसी कलेक्शन में मौजूद खास स्ट्रिंग के लिए टेक्स्ट से खोज करनी है, तो टेक्स्ट इंडेक्स बनाएं.

अपने कलेक्शन के लिए टेक्स्ट इंडेक्स बनाने के लिए, यह तरीका अपनाएं:

MongoDB API

टेक्स्ट इंडेक्स बनाने के लिए, createIndex() तरीके का इस्तेमाल करें. नीचे दिए गए उदाहरण में, जब किसी दस्तावेज़ को cities कलेक्शन में लिखा जाता है, तो country या food फ़ील्ड भर जाते हैं. इन फ़ील्ड को खोजने के लिए इंडेक्स किया जाता है.

db.cities.createIndex({"country": "text", "food": "text"})

इंडेक्स किए जाने के लिए, फ़ील्ड को स्ट्रिंग या स्ट्रिंग का कलेक्शन होना चाहिए. अरे इंडेक्स, खोज के लिए इंडेक्स नहीं किए जाते. इस वजह से, a.1.b को इंडेक्स करने पर, something को {a: {1: {b: something}}} में इंडेक्स किया जाएगा, लेकिन {a: [one, {b: something}]} में नहीं.

db.runCommand() की मदद से भी इंडेक्स बनाए जा सकते हैं. हर कलेक्शन के लिए सिर्फ़ एक टेक्स्ट इंडेक्स हो सकता है. हालांकि, एक db.runCommand() में अलग-अलग तरह के कई इंडेक्स बनाए जा सकते हैं. टेक्स्ट इंडेक्स बनाने के लिए, इस उदाहरण में db.runCommand() का इस्तेमाल किया गया है:

db.runCommand({
  createIndexes: "cities",
  indexes: [
    {
      key: { "country": "text", "food": "text" },
      name: "country_text_food_text"
    }
  ]
})

डिफ़ॉल्ट भाषा तय करना

आपके पास डिफ़ॉल्ट भाषा या अपने दस्तावेज़ में फ़ील्ड पाथ तय करने का विकल्प भी होता है. इसमें डिफ़ॉल्ट भाषा शामिल होगी.

यहां दिए गए उदाहरण में, myLanguageField को language_override के तौर पर तय किया गया है. जब cities कलेक्शन में मौजूद किसी दस्तावेज़ में myLanguageField नाम का कोई फ़ील्ड होता है, तो उस फ़ील्ड की वैल्यू का इस्तेमाल उस दस्तावेज़ के लिए country फ़ील्ड को इंडेक्स करने की भाषा तय करने के लिए किया जाता है. यह वैल्यू, french की डिफ़ॉल्ट भाषा को बदल देती है.

db.cities.createIndex({"country": "text"}, {"default_language": "french", "language_override": "myLanguageField"})
  • भाषा को उसके पूरे नाम (english) या दो अक्षरों वाले आईएसओ भाषा कोड (en) के तौर पर डाला जा सकता है.
  • अगर डिफ़ॉल्ट भाषा सेट नहीं की जाती है, तो Cloud Firestore डिफ़ॉल्ट रूप से अंग्रेज़ी पर सेट हो जाता है.
  • भाषा बदलने वाला फ़ील्ड, टॉप-लेवल फ़ील्ड होना चाहिए. अगर इस नीति को सेट नहीं किया जाता है, तो भाषा बदलने वाला फ़ील्ड डिफ़ॉल्ट रूप से language पर सेट हो जाता है.
  • अगर आपने डिफ़ॉल्ट भाषा को null वर्ण पर सेट किया है, तो Cloud Firestore किसी भी फ़ील्ड का इस्तेमाल, भाषा बदलने के लिए नहीं करता.

इस्तेमाल की जाने वाली भाषाओं की सूची देखने के लिए, इसे बड़ा करें

भाषा कोड भाषा का नाम
"und" अपने-आप पहचानने की सुविधा
"af" अफ़्रीकान्स
"ak" आकान
"sq" अल्बेनियन
"am" ऐमहैरिक
"ar" ऐरेबिक
"hy" आर्मीनियन
"az" अज़रबैजानी
"eu" बैस्क
"be" Belarusian
"bn" बांग्ला
"bs" बोस्नियन
"bg" बल्गैरियन
"मेरा" बर्मीज़
"ca" कैटलैन
"ceb" सेबुआनो
"chr" चेरोकी
"zh" चाइनीज़
"zh-Hant" चाइनीज़ (ट्रेडिशनल)
"hr" क्रोएशियन
"cs" चेक
"da" डेनिश
"nl" डच
"en" अंग्रेज़ी
"eo" एस्पेरेंटो
"et" एस्टोनियन
"fil" फ़िलिपिनो
"fi" फ़िनिश
"hi" फ़्रेंच
"gl" गैलिशियन
"ka" जॉर्जियन
"de" जर्मन
"el" ग्रीक
"gu" गुजराती
"ht" Haitian_Creole
"ha" हाउसा
"haw" हवायन
"iw" हीब्रू
"नमस्ते" हिन्दी
"hmn" हमॉन्ग
"hu" हंगेरियन
"is" आइसलैंडिक
"ig" ईग्बो
"id" इंडोनेशियन
"ga" आयरिश
"it" इटैलियन
"ja" जैपनीज़
"jv" जावानीज़
"kn" कन्नड़
"kk" कज़ाक़
"कि॰मी॰" खमेर
"ko" कोरियन
"lo" लाओ
"la" लैटिन
"lv" लातवियन
"lt" लिथुएनियन
"lb" लक्ज़मबर्गिश
"mk" मेसिडोनियन
"एमजी" मालागासी
"ms" मलय
"मिलीलीटर" मलयालम
"mt" माल्टीज़
"mi" माओरी
"mr" मराठी
"mfe" मोरीस्येन
"mn" मंगोलियन
"sr-ME" Serbian_Montenegro
"ne" नेपाली
"नहीं" नॉर्वीजन
"ny" न्यान्जा
"या" ओड़िया
"fa" फ़ारसी
"pl" पोलिश
"pt-BR" Portuguese_Brazil
"pt-PT" पॉर्चुगीज़ (पुर्तगाल)
"pa" पंजाबी
"ro" रोमेनियन
"ru" रशियन
"gd" स्कॉटिश गैलिक
"sr" सर्बियन
"st" सदर्न सिसोथो
"si" सिंहला
"sk" स्लोवाक
"sl" स्लोवेनियन
"so" सोमाली
"es" स्पैनिश
"su" संडानीज़
"sw" स्वाहिली
"sv" स्वीडिश
"tg" ताजिक
"ta" तमिल
"te" तेलुगु
"th" थाई
"tr" टर्किश
"uk" यूक्रेनियन
"ur" उर्दू
"uz" उज़्बेक
"vi" वियतनामीज़
"cy" वेल्श
"yi" यिद्दि‍‍श
"yo" योरुबा
"zu" ज़ुलु

टेक्स्ट इंडेक्स को बांटना

किसी फ़ील्ड का इस्तेमाल करके, इंडेक्स को भी बांटा जा सकता है, ताकि क्वेरी को किसी फ़ील्ड की वैल्यू के हिसाब से फ़िल्टर किया जा सके. इस कॉन्फ़िगरेशन की मदद से, बेहतर परफ़ॉर्मेंस वाली क्वेरी चलाई जा सकती हैं. ऐसा तब किया जा सकता है, जब आपको उस इंडेक्स में हमेशा किसी खास फ़ील्ड को फ़िल्टर करना हो जिसमें क्वेरी की जा रही है.

पार्टिशन के साथ इंडेक्स बनाने के लिए, firestoreOptions फ़ील्ड को इस तरह कॉन्फ़िगर करें:

db.runCommand({
  createIndexes: "cities",
  indexes: [
    {
      key: { "country": "text", "food": "text"},
      name: "country_text_food_text"
      firestoreOptions: {"customPartitionFields": ["PARTITIONED_FIELD"]
    }
  ]
})

जगह:

  • PARTITIONED_FIELD उस फ़ील्ड का नाम है जिसका इस्तेमाल, डेटा को सेगमेंट में बांटने के लिए किया जाता है. यह वैल्यू, एक स्ट्रिंग होनी चाहिए और टॉप-लेवल फ़ील्ड से जुड़ी होनी चाहिए. हिस्सों में बांटे गए इंडेक्स पर क्वेरी चलाने पर, इस फ़ील्ड की वैल्यू के आधार पर नतीजों को फ़िल्टर किया जा सकता है. उदाहरण के लिए, city का इस्तेमाल करके, इंडेक्स को अलग-अलग हिस्सों में बांटा जा सकता है. अगर आपके टेक्स्ट इंडेक्स में city फ़ील्ड तय किया गया है, तो उपयोगकर्ता किसी खास शहर के लिए क्वेरी कर सकते हैं.

    पार्टिशन में सिर्फ़ एक फ़ील्ड होना चाहिए. अगर किसी इंडेक्स को पार्टिशन किया जाता है, तो सिर्फ़ ऐसी क्वेरी चलाई जा सकती हैं जिनमें पार्टिशन किया गया फ़ील्ड तय किया गया हो.

सीमाएं

  • एक अनुरोध में सिर्फ़ एक इंडेक्स बनाया जा सकता है.
  • MongoDB API की मदद से इंडेक्स बनाने के लिए, ऑडिट लॉग में google.firestore.admin.v1.FirestoreAdmin.CreateIndex तरीके का इस्तेमाल किया जाता है.
  • इंडेक्स के लिए उपलब्ध विकल्पों के बारे में जानने के लिए, इंडेक्स और इंडेक्स की प्रॉपर्टी देखें.

Firebase कंसोल

  1. Firebase कंसोल में, Firestore Database पेज पर जाएं.

    Firestore डेटाबेस पर जाएं

  2. डेटाबेस की सूची में से कोई डेटाबेस चुनें.

  3. इंडेक्स टैब में, इंडेक्स बनाएं पर क्लिक करें.

  4. कलेक्शन आईडी डालें.

  5. एक या उससे ज़्यादा फ़ील्ड पाथ जोड़ें और हर एक के लिए इंडेक्स का विकल्प चुनें.

  6. बनाएं पर क्लिक करें.

  7. आपका नया इंडेक्स, इंडेक्स की सूची में दिखता है. साथ ही, MongoDB के साथ काम करने वाले ऑपरेशन, आपका इंडेक्स बनाना शुरू कर देते हैं. इंडेक्स बन जाने के बाद, आपको इंडेक्स के बगल में हरे रंग का सही का निशान दिखेगा. अगर इंडेक्स नहीं बनाया गया है, तो इसकी वजह जानने के लिए इंडेक्स बनाने से जुड़ी गड़बड़ियां देखें.

gcloud CLI

टेक्स्ट इंडेक्स बनाने के लिए, gcloud firestore indexes composite create कमांड का इस्तेमाल करें. --api-scope को mongodb-compatible-api पर सेट करें.

gcloud firestore indexes composite create \
  --database='DATABASE_ID' \
  --collection-group=COLLECTION_GROUP \
  --field-config=field-path=FIELD_NAME,search-config='{"text-spec": {"index-specs": [{"index-type": "tokenized", "match-type": "match-globally"}]}}' \
  --api-scope=mongodb-compatible-api \
  --search-index-options=text-language=en \
  --async

इनकी जगह ये डालें:

  • DATABASE_ID: डेटाबेस आईडी.
  • COLLECTION_GROUP: इंडेक्स किए जाने वाले कलेक्शन का आईडी.
  • FIELD_NAME: इंडेक्स किए जाने वाले फ़ील्ड का नाम.

--async फ़्लैग, बैकग्राउंड में इंडेक्स बनाने की प्रोसेस को चलाता है.

2dsphere इंडेक्स बनाना

जियोस्पेशल क्वेरी करने और किसी खास देशांतर और अक्षांश से तय की गई रेंज में मौजूद दस्तावेज़ों को खोजने के लिए, 2dsphere इंडेक्स बनाएं.

अपने कलेक्शन के लिए 2dsphere इंडेक्स बनाने के लिए, यह तरीका अपनाएं:

MongoDB API

इंडेक्स बनाने के लिए, createIndex() मेथड का इस्तेमाल करें. उदाहरण के लिए:

db.restaurants.createIndex({"location" : "2dsphere", "region": "2dsphere"})

db.runCommand() के साथ इंडेक्स बनाने की सुविधा भी काम करती है. हालांकि, इसके लिए ज़्यादा से ज़्यादा एक इंडेक्स होना चाहिए:

db.runCommand({
  createIndexes: "restaurants",
  indexes: [
    {
      key: { "location": "2dsphere", "region": "2dsphere" },
      name: "location_2dsphere_region_2dsphere"
    }
  ]
})

2dsphere इंडेक्स को पार्टिशन करना

किसी फ़ील्ड का इस्तेमाल करके, इंडेक्स को भी बांटा जा सकता है, ताकि क्वेरी को किसी फ़ील्ड की वैल्यू के हिसाब से फ़िल्टर किया जा सके. इस कॉन्फ़िगरेशन की मदद से, बेहतर परफ़ॉर्मेंस वाली क्वेरी चलाई जा सकती हैं. ऐसा तब किया जा सकता है, जब आपको उस इंडेक्स में हमेशा किसी खास फ़ील्ड को फ़िल्टर करना हो जिसमें क्वेरी की जा रही है.

पार्टिशन के साथ इंडेक्स बनाने के लिए, firestoreOptions फ़ील्ड को इस तरह कॉन्फ़िगर करें:

db.runCommand({
  createIndexes: "restaurants",
  indexes: [
    {
      key: { "location": "2dsphere", "region": "2dsphere" },
      name: "location_2dsphere_region_2dsphere"
      firestoreOptions: {"customPartitionFields": ["PARTITIONED_FIELD"]
    }
  ]
})

जगह:

  • PARTITIONED_FIELD उस फ़ील्ड का नाम है जिसका इस्तेमाल, डेटा को सेगमेंट में बांटने के लिए किया जाता है. हिस्सों में बांटे गए इंडेक्स पर क्वेरी चलाने पर, इस फ़ील्ड की वैल्यू के आधार पर नतीजों को फ़िल्टर किया जा सकता है. उदाहरण के लिए, अगर आपके इंडेक्स में क्षेत्रीय जगहों के लिए region फ़ील्ड है, तो region का इस्तेमाल करके अपने इंडेक्स को बांटा जा सकता है. इससे उपयोगकर्ता अपने इलाके के रेस्टोरेंट के बारे में क्वेरी कर सकते हैं.

    अगर किसी इंडेक्स को पार्टिशन किया जाता है, तो सिर्फ़ ऐसी क्वेरी चलाई जा सकती हैं जिनमें पार्टिशन किया गया फ़ील्ड मौजूद हो.

सीमाएं

  • एक अनुरोध में सिर्फ़ एक इंडेक्स बनाया जा सकता है.
  • MongoDB API की मदद से इंडेक्स बनाने के लिए, ऑडिट लॉग में google.firestore.admin.v1.FirestoreAdmin.CreateIndex तरीके का इस्तेमाल किया जाता है.
  • इंडेक्स के लिए उपलब्ध विकल्पों के बारे में जानने के लिए, इंडेक्स और इंडेक्स की प्रॉपर्टी देखें.

Firebase कंसोल

  1. Firebase कंसोल में, Firestore Database पेज पर जाएं.

    Firestore डेटाबेस पर जाएं

  2. डेटाबेस की सूची में से कोई डेटाबेस चुनें.

  3. इंडेक्स टैब में, इंडेक्स बनाएं पर क्लिक करें.

  4. कलेक्शन आईडी डालें.

  5. एक या उससे ज़्यादा फ़ील्ड पाथ जोड़ें और हर एक के लिए इंडेक्स का विकल्प चुनें.

  6. बनाएं पर क्लिक करें.

  7. आपका नया इंडेक्स, इंडेक्स की सूची में दिखता है. साथ ही, MongoDB के साथ काम करने वाले ऑपरेशन, आपका इंडेक्स बनाना शुरू कर देते हैं. इंडेक्स बन जाने के बाद, आपको इंडेक्स के बगल में हरे रंग का सही का निशान दिखेगा. अगर इंडेक्स नहीं बनाया गया है, तो इसकी वजह जानने के लिए इंडेक्स बनाने से जुड़ी गड़बड़ियां देखें.

gcloud CLI

2dsphere इंडेक्स बनाने के लिए, gcloud firestore indexes composite create कमांड का इस्तेमाल करें. --api-scope को mongodb-compatible-api पर सेट करें.

gcloud firestore indexes composite create \
  --database='DATABASE_ID' \
  --collection-group=COLLECTION_GROUP \
  --field-config=field-path=FIELD_NAME,search-config='{"geo-spec": {}}' \
  --api-scope=mongodb-compatible-api \
  --async

इनकी जगह ये डालें:

  • DATABASE_ID: डेटाबेस आईडी.
  • COLLECTION_GROUP: इंडेक्स किए जाने वाले कलेक्शन का आईडी.
  • FIELD_NAME: इंडेक्स किए जाने वाले फ़ील्ड का नाम.

--async फ़्लैग, बैकग्राउंड में इंडेक्स बनाने की प्रोसेस को चलाता है.

कोई इंडेक्स मिटाना

किसी इंडेक्स को मिटाने के लिए, यह तरीका अपनाएं:

MongoDB API

किसी इंडेक्स को मिटाने के लिए, dropIndex() तरीके का इस्तेमाल करें. उदाहरण के लिए:

इंडेक्स के नाम का इस्तेमाल करके, इंडेक्स मिटाना

db.restaurants.dropIndex("cuisine_index")

इंडेक्स की परिभाषा का इस्तेमाल करके, किसी इंडेक्स को मिटाना

db.restaurants.dropIndex({"cuisine" : 1})
Firebase कंसोल
  1. Firebase कंसोल में, Firestore Database पेज पर जाएं.

    Firestore डेटाबेस पर जाएं

  2. डेटाबेस की सूची में से कोई डेटाबेस चुनें.
  3. इंडेक्स टैब पर क्लिक करें.
  4. इंडेक्स की सूची में, ज़्यादा बटन से मिटाएं को चुनें. ऐसा उस इंडेक्स के लिए करें जिसे आपको मिटाना है.
  5. इंडेक्स मिटाएं पर क्लिक करें.
gcloud CLI
  1. इंडेक्स का नाम ढूंढने के लिए, gcloud firestore indexes composite list कमांड का इस्तेमाल करें.

    gcloud firestore indexes composite list \
    --database='DATABASE_ID'

    DATABASE_ID को डेटाबेस आईडी से बदलें.

  2. इंडेक्स को मिटाने के लिए, gcloud firestore indexes composite delete कमांड का इस्तेमाल करें.

    gcloud firestore indexes composite delete INDEX_NAME \
    --database='DATABASE_ID'

    इनकी जगह ये डालें:

    • INDEX_NAME: इंडेक्स का नाम
    • DATABASE_ID: डेटाबेस आईडी

इंडेक्स बनाने में लगने वाला समय

इंडेक्स बनाने के लिए, Cloud Firestore को इंडेक्स बनाना होगा. इसके बाद, मौजूदा डेटा की मदद से इंडेक्स की एंट्री को बैकफ़िल करना होगा. इंडेक्स बनाने में लगने वाला समय, इन बातों से तय होता है:

  • इंडेक्स बनाने में कम से कम कुछ मिनट लगते हैं. भले ही, डेटाबेस खाली हो.

  • इंडेक्स एंट्री को बैकफ़िल करने में लगने वाला समय इस बात पर निर्भर करता है कि नए इंडेक्स में कितना मौजूदा डेटा मौजूद है. इंडेक्स की परिभाषा से मैच करने वाली फ़ील्ड वैल्यू जितनी ज़्यादा होंगी, इंडेक्स एंट्री को बैकफ़िल करने में उतना ही ज़्यादा समय लगेगा.

ज़्यादा समय तक चलने वाली कार्रवाई मैनेज करना

इंडेक्स बिल्ड, ज़्यादा समय तक चलने वाली कार्रवाइयां हैं. यहां दिए गए सेक्शन में, इंडेक्स के लिए लंबे समय तक चलने वाले ऑपरेशन के साथ काम करने का तरीका बताया गया है.

इंडेक्स बनाने की प्रोसेस शुरू होने के बाद, Cloud Firestore इस ऑपरेशन को एक यूनीक नाम असाइन करता है. कार्रवाइयों के नाम से पहले projects/PROJECT_ID/databases/DATABASE_ID/operations/ लगाया जाता है. उदाहरण के लिए:

projects/PROJECT_ID/databases/DATABASE_ID/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

describe कमांड के लिए, कार्रवाई का नाम तय करते समय प्रीफ़िक्स को छोड़ा जा सकता है.

ज़्यादा समय तक चलने वाली सभी कार्रवाइयों की सूची बनाना

लंबे समय से चल रहे ऑपरेशन की सूची देखने के लिए, gcloud firestore operations list कमांड का इस्तेमाल करें. इस निर्देश से, चल रहे और हाल ही में पूरे हुए ऑपरेशन की सूची दिखती है. ऑपरेशन पूरे होने के बाद, कुछ दिनों तक सूची में दिखते हैं:

gcloud firestore operations list

कार्रवाई की स्थिति देखना

लंबे समय तक चलने वाले सभी ऑपरेशन की सूची बनाने के बजाय, किसी एक ऑपरेशन की जानकारी की सूची बनाई जा सकती है:

gcloud firestore operations describe operation-name

अपलोड होने में लगने वाले समय का अनुमान लगाना

ऑपरेशन की पूरी स्थिति जानने के लिए, ऑपरेशन के चलने के दौरान state फ़ील्ड की वैल्यू देखें.

ज़्यादा समय तक चलने वाली कार्रवाई की स्थिति के अनुरोध से, workEstimated और workCompleted मेट्रिक भी मिलती हैं. workEstimated से, किसी कार्रवाई के दौरान प्रोसेस किए जाने वाले दस्तावेज़ों की कुल संख्या का अनुमान पता चलता है. workCompleted इससे पता चलता है कि अब तक कितने दस्तावेज़ प्रोसेस किए गए हैं. कार्रवाई पूरी होने के बाद, workCompleted उन दस्तावेज़ों की कुल संख्या दिखाता है जिन्हें प्रोसेस किया गया था. यह संख्या, workEstimated की वैल्यू से अलग हो सकती है.

किसी कार्रवाई की प्रोग्रेस का अनुमान लगाने के लिए, workCompleted को workEstimated से भाग दें.

इंडेक्स बनाने की प्रोसेस का एक उदाहरण यहां दिया गया है:

{
  "operations": [
    {
      "name": "projects/project-id/operations/AyAyMDBiM2U5NTgwZDAtZGIyYi0zYjc0LTIzYWEtZjg1ZGdWFmZWQHEjF0c2Flc3UtcmV4ZWRuaS1uaW1kYRUKSBI",
      "metadata": {
        "@type": "type.googleapis.com/google.firestore.admin.v1.IndexOperationMetadata",
        "common": {
          "operationType": "CREATE_INDEX",
          "startTime": "2020-06-23T16:52:25.697539Z",
          "state": "PROCESSING"
        },
        "progressDocuments": {
          "workCompleted": "219327",
          "workEstimated": "2198182"
        }
       },
    },
    ...

कार्रवाई पूरी होने पर, कार्रवाई के ब्यौरे में "done": true शामिल होगा. कार्रवाई के नतीजे के लिए, state फ़ील्ड की वैल्यू देखें. अगर जवाब में done फ़ील्ड सेट नहीं है, तो कार्रवाई पूरी नहीं हुई है.