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

इस पेज पर, Firestore Enterprise वर्शन के लिए इंडेक्स मैनेज करने का तरीका बताया गया है.

Firestore Enterprise वर्शन के इंडेक्स के बारे में ज़्यादा जानने के लिए, इंडेक्स की खास जानकारी देखें.

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

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

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

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

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

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

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

इंडेक्स बनाने के लिए, gcloud firestore indexes composite create कमांड का इस्तेमाल करें.

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

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

  • 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 सेट करें.

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

Terraform

google_firestore_index संसाधन का इस्तेमाल करें.

resource "google_firestore_index" "index" {
  database    = "DATABASE_ID"
  collection  = "COLLECTION"
  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 में से कोई एक

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

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

Google Cloud कंसोल
  1. Google Cloud console में, डेटाबेस पेज पर जाएं.

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

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

टेक्स्ट इंडेक्स बनाने के लिए, gcloud firestore indexes composite create कमांड का इस्तेमाल करें:

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"}]}}' \
  --search-index-options=text-language=en \
  --async

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

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

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

जियोस्पेशल इंडेक्स बनाना

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

Google Cloud कंसोल
  1. Google Cloud console में, डेटाबेस पेज पर जाएं.

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

  2. डेटाबेस की सूची में से कोई डेटाबेस चुनें.
  3. नेविगेशन मेन्यू में, इंडेक्स पर क्लिक करें.
  4. ज़रूरी नहीं: इंडेक्स के लिए कोई नाम डालें.
  5. Search Type पर जाएं और Geo (2dsphere) को चुनें.
  6. कलेक्शन आईडी डालें.
  7. इंडेक्स करने के लिए, एक या उससे ज़्यादा फ़ील्ड कॉन्फ़िगर करें.
  8. इंडेक्स के लिए क्वेरी का स्कोप सेट करें.
  9. बनाएं पर क्लिक करें.

आपका नया इंडेक्स, इंडेक्स की सूची में दिखता है. साथ ही, Cloud Firestore आपका इंडेक्स बनाना शुरू कर देता है. इंडेक्स बन जाने पर, उसके बगल में हरे रंग का सही का निशान दिखता है.

gcloud CLI

जियोस्पेशियल इंडेक्स बनाने के लिए, gcloud firestore indexes composite create कमांड का इस्तेमाल करें:

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

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

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

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

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

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

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 फ़ील्ड सेट नहीं है, तो कार्रवाई पूरी नहीं हुई है.