จัดการดัชนี

หน้านี้จะอธิบายวิธีจัดการดัชนี ดูข้อมูลเพิ่มเติม เกี่ยวกับดัชนีได้ที่ภาพรวมของดัชนี

ก่อนเริ่มต้น

ก่อนที่จะสร้างดัชนีใน 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() ยังรองรับดัชนีอย่างน้อย 1 รายการด้วย

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

โปรดทราบข้อจำกัดต่อไปนี้

Firebase คอนโซล
  1. ในFirebaseคอนโซล ให้ไปที่หน้าฐานข้อมูล Firestore

    ไปที่ฐานข้อมูล Firestore

  2. เลือกฐานข้อมูลจากรายการฐานข้อมูล
  3. ในแท็บดัชนี ให้คลิกสร้างดัชนี
  4. ป้อนรหัสคอลเล็กชัน
  5. เพิ่มเส้นทางฟิลด์อย่างน้อย 1 รายการ แล้วเลือกตัวเลือกดัชนีสำหรับแต่ละรายการ
  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() ได้ด้วย คุณมีดัชนีข้อความได้เพียง 1 รายการต่อคอลเล็กชัน แต่สร้างดัชนีหลายรายการที่มีประเภทต่างกันใน 1 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) หรือรหัสภาษา ISO แบบ 2 ตัวอักษร (en) ก็ได้
  • หากไม่ได้ตั้งค่าภาษาเริ่มต้น Cloud Firestore จะมีค่าเริ่มต้นเป็นภาษาอังกฤษ
  • ฟิลด์การลบล้างภาษาต้องเป็นฟิลด์ระดับบนสุด หากไม่ได้ตั้งค่าไว้ ช่องการลบล้างภาษาจะมีค่าเริ่มต้นเป็น language
  • หากคุณตั้งค่าภาษาเริ่มต้นเป็นอักขระ null Cloud Firestore จะไม่ใช้ฟิลด์ใดเป็นค่าลบล้างภาษา

ขยายเพื่อดูรายการภาษาที่รองรับ

รหัสภาษา ชื่อภาษา
"und" ตรวจหาอัตโนมัติ
"af" อาฟรีกานส์
"ak" อะคัน
"sq" แอลเบเนีย
"am" อัมฮาริก
"ar" อาหรับ
"ฮาย" อาร์เมเนีย
"az" อาเซอร์ไบจาน
"eu" บาสก์
"be" เบลารุส
"bn" บังคลา
"bs" บอสเนีย
"bg" บัลแกเรีย
"ของฉัน" พม่า
"ca" คาตาลัน
"ceb" เซบู
"chr" เชอโรกี
"zh" จีน
"zh-Hant" จีน (ตัวเต็ม)
"hr" โครเอเชีย
"cs" เช็ก
"da" เดนมาร์ก
"nl" ดัตช์
"en" อังกฤษ
"eo" เอสเปอแรนโต
"et" เอสโตเนีย
"fil" ฟิลิปปินส์
"fi" ฟินแลนด์
"fr" ฝรั่งเศส
"gl" กาลิเชียน
"ka" จอร์เจีย
"de" เยอรมัน
"el" กรีก
"gu" คุชราต
"ht" ครีโอลแบบเฮติ
"ฮ่า" เฮาซา
"haw" ฮาวายเอี้ยน
"iw" ฮีบรู
"สวัสดี" ฮินดี
"hmn" ม้ง
"หู" ฮังการี
"คือ" ไอซ์แลนด์
"ig" อิกโบ
"id" อินโดนีเซีย
"ga" ไอร์แลนด์
"it" อิตาลี
"ja" ญี่ปุ่น
"jv" ชวา
"kn" กันนาดา
"kk" คาซัค
"กม." เขมร
"ko" เกาหลี
"lo" ลาว
"la" ละติน
"lv" ลัตเวีย
"lt" ลิทัวเนีย
"lb" ลักเซมเบิร์ก
"mk" มาซีโดเนีย
"mg" มาลากาซี
"ms" มาเลย์
"ml" มาลายาลัม
"mt" มอลตา
"mi" เมารี
"mr" มราฐี
"mfe" มอริสเยน
"mn" มองโกเลีย
"sr-ME" Serbian_Montenegro
"ne" เนปาล
"ไม่" นอร์เวย์
"ny" เนียนจา
"หรือ" โอเดีย
"fa" เปอร์เซีย
"pl" โปแลนด์
"pt-BR" โปรตุเกส (บราซิล)
"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 ในดัชนีข้อความ ผู้ใช้จะค้นหาเมืองที่เฉพาะเจาะจงได้

    พาร์ติชันต้องเป็นฟิลด์เดียวเท่านั้น หากแบ่งพาร์ติชันดัชนี คุณจะ เรียกใช้ได้เฉพาะการค้นหาที่ระบุช่องที่แบ่งพาร์ติชัน

ข้อจำกัด

Firebase คอนโซล

  1. ในFirebase คอนโซล ให้ไปที่หน้าฐานข้อมูล Firestore

    ไปที่ฐานข้อมูล Firestore

  2. เลือกฐานข้อมูลจากรายการฐานข้อมูล

  3. ในแท็บดัชนี ให้คลิกสร้างดัชนี

  4. ป้อนรหัสคอลเล็กชัน

  5. เพิ่มเส้นทางฟิลด์อย่างน้อย 1 รายการ แล้วเลือกตัวเลือกดัชนีสำหรับแต่ละรายการ

  6. คลิกสร้าง

  7. ดัชนีใหม่จะแสดงในรายการดัชนี และการดำเนินการที่เข้ากันได้กับ MongoDB จะเริ่มสร้างดัชนี เมื่อสร้างดัชนีแล้ว คุณจะเห็นเครื่องหมายถูกสีเขียวข้างดัชนี หากไม่ได้สร้างดัชนี โปรดดูข้อผิดพลาดในการสร้างดัชนีเพื่อดูสาเหตุที่อาจเกิดขึ้น

สร้างดัชนี 2dsphere

สร้างดัชนี 2dsphere เพื่อทำการค้นหาเชิงพื้นที่และค้นหาเอกสารที่อยู่ในช่วงหนึ่งๆ จากลองจิจูดและละติจูดที่เฉพาะเจาะจง

หากต้องการสร้างดัชนี 2dsphere สำหรับคอลเล็กชัน ให้ทำตาม ขั้นตอนต่อไปนี้

MongoDB API

ใช้วิธี createIndex() เพื่อสร้างดัชนี เช่น

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

ระบบยังรองรับการสร้างดัชนีด้วย db.runCommand() โดยมีดัชนีได้สูงสุด 1 รายการ

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 เพื่อให้ผู้ใช้ค้นหาร้านอาหารในภูมิภาคของตนได้

    หากแบ่งพาร์ติชันดัชนี คุณจะเรียกใช้ได้เฉพาะการค้นหาที่มีการระบุฟิลด์ที่แบ่งพาร์ติชัน

ข้อจำกัด

Firebase คอนโซล

  1. ในFirebase คอนโซล ให้ไปที่หน้าฐานข้อมูล Firestore

    ไปที่ฐานข้อมูล Firestore

  2. เลือกฐานข้อมูลจากรายการฐานข้อมูล

  3. ในแท็บดัชนี ให้คลิกสร้างดัชนี

  4. ป้อนรหัสคอลเล็กชัน

  5. เพิ่มเส้นทางฟิลด์อย่างน้อย 1 รายการ แล้วเลือกตัวเลือกดัชนีสำหรับแต่ละรายการ

  6. คลิกสร้าง

  7. ดัชนีใหม่จะแสดงในรายการดัชนี และการดำเนินการที่เข้ากันได้กับ MongoDB จะเริ่มสร้างดัชนี เมื่อสร้างดัชนีแล้ว คุณจะเห็นเครื่องหมายถูกสีเขียวข้างดัชนี หากไม่ได้สร้างดัชนี โปรดดูข้อผิดพลาดในการสร้างดัชนีเพื่อดูสาเหตุที่อาจเกิดขึ้น

ลบดัชนี

หากต้องการลบดัชนี ให้ทำตามขั้นตอนต่อไปนี้

MongoDB API

ใช้เมธอด dropIndex() เพื่อลบดัชนี เช่น

ลบดัชนีโดยใช้ชื่อดัชนี

db.restaurants.dropIndex("cuisine_index")

ลบดัชนีโดยใช้คำจำกัดความดัชนี

db.restaurants.dropIndex({"cuisine" : 1})
Firebase คอนโซล
  1. ในFirebaseคอนโซล ให้ไปที่หน้าฐานข้อมูล Firestore

    ไปที่ฐานข้อมูล 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ป้อนข้อมูลย้อนหลังในรายการดัชนีด้วยข้อมูลที่มีอยู่ เวลาที่ใช้ในการสร้างดัชนีจะขึ้นอยู่กับปัจจัยต่อไปนี้

  • เวลาบิลด์ขั้นต่ำสำหรับดัชนีคือ 2-3 นาที แม้ว่าจะเป็นฐานข้อมูลที่ว่างเปล่าก็ตาม

  • เวลาที่ต้องใช้ในการทดแทนรายการดัชนีขึ้นอยู่กับปริมาณข้อมูลที่มีอยู่ ซึ่งอยู่ในดัชนีใหม่ ยิ่งค่าฟิลด์ตรงกับคำจำกัดความของดัชนีมากเท่าใด ก็จะยิ่งใช้เวลานานขึ้นในการเติมข้อมูลย้อนหลังในรายการดัชนี

จัดการการดำเนินการที่ใช้เวลานาน

การสร้างดัชนีเป็นการดำเนินการที่ใช้เวลานาน ส่วนต่อไปนี้จะอธิบาย วิธีใช้งานการดำเนินการที่ใช้เวลานานสำหรับดัชนี

หลังจากเริ่มสร้างดัชนีแล้ว Cloud Firestore จะกำหนดชื่อที่ไม่ซ้ำกันให้กับการดำเนินการ ชื่อการดำเนินการจะมีคำนำหน้าเป็น projects/PROJECT_ID/databases/DATABASE_ID/operations/ เช่น

projects/PROJECT_ID/databases/DATABASE_ID/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

คุณสามารถละเว้นคำนำหน้าเมื่อระบุชื่อการดำเนินการสำหรับคำสั่ง describe ได้

แสดงรายการการดำเนินการที่ใช้เวลานานทั้งหมด

หากต้องการแสดงรายการการดำเนินการที่ใช้เวลานาน ให้ใช้คำสั่ง gcloud firestore operations list คำสั่งนี้จะแสดงการดำเนินการที่กำลังดำเนินอยู่และการดำเนินการที่เพิ่งเสร็จสมบูรณ์ การดำเนินการจะแสดงเป็นเวลา 2-3 วันหลังจากเสร็จสิ้น

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 ในการตอบกลับ แสดงว่าการดำเนินการยังไม่เสร็จสมบูรณ์