จัดการดัชนี

หน้านี้จะอธิบายวิธีจัดการดัชนีสำหรับ Firestore Enterprise Edition

ดูข้อมูลเพิ่มเติมเกี่ยวกับดัชนีของ Firestore Enterprise Edition ได้ที่ภาพรวมของดัชนี

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

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

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

  2. เลือกฐานข้อมูลจากรายการฐานข้อมูล
  3. ในแท็บดัชนี ให้คลิกสร้างดัชนี
  4. ป้อนรหัสคอลเล็กชัน
  5. เพิ่มเส้นทางฟิลด์อย่างน้อย 1 รายการ แล้วเลือกตัวเลือกดัชนีสำหรับแต่ละรายการ
  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 ให้ไปที่หน้าฐานข้อมูล

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

  2. เลือกฐานข้อมูลจากรายการฐานข้อมูล
  3. ในเมนูการนำทาง ให้คลิกดัชนี
  4. ไม่บังคับ: ป้อนชื่อดัชนี
  5. ไปที่ประเภทการค้นหา แล้วเลือกข้อความ
  6. ป้อนรหัสคอลเล็กชัน
  7. กำหนดค่าช่องอย่างน้อย 1 ช่องเพื่อจัดทำดัชนี
  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 ให้ไปที่หน้าฐานข้อมูล

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

  2. เลือกฐานข้อมูลจากรายการฐานข้อมูล
  3. ในเมนูการนำทาง ให้คลิกดัชนี
  4. ไม่บังคับ: ป้อนชื่อดัชนี
  5. ไปที่ Search Type แล้วเลือก Geo (2dsphere)
  6. ป้อนรหัสคอลเล็กชัน
  7. กำหนดค่าช่องอย่างน้อย 1 ช่องเพื่อจัดทำดัชนี
  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

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

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