Cloud Firestore ช่วยให้มั่นใจในประสิทธิภาพการค้นหาโดยกำหนดให้ต้องมีดัชนีสำหรับการค้นหาทุก ครั้ง ระบบจะสร้างดัชนีที่จำเป็นสำหรับการค้นหาพื้นฐานที่สุดให้คุณโดย อัตโนมัติ เมื่อคุณใช้และทดสอบแอป Cloud Firestore จะสร้างข้อความแสดงข้อผิดพลาดที่จะช่วยคุณสร้างดัชนีเพิ่มเติม ที่แอปต้องการ หน้านี้จะอธิบายวิธีจัดการดัชนี อัตโนมัติ ดัชนีที่สร้างด้วยตนเอง และดัชนีเวกเตอร์
สร้างดัชนีที่ขาดหายไปผ่านข้อความแสดงข้อผิดพลาด
หากคุณพยายามทำการค้นหาแบบผสมที่มีอนุประโยคช่วงซึ่งไม่ได้แมปกับดัชนีที่มีอยู่ คุณจะได้รับข้อผิดพลาด ข้อความแสดงข้อผิดพลาดจะมีลิงก์โดยตรงเพื่อสร้างดัชนีที่ขาดหายไปในคอนโซล Firebase
ทำตามลิงก์ที่สร้างขึ้นไปยังคอนโซล Firebase ตรวจสอบข้อมูลที่ป้อนโดยอัตโนมัติ แล้วคลิกสร้าง
ในกรณีที่ต้องใช้ดัชนีเวกเตอร์ ข้อความแสดงข้อผิดพลาดจะมีคำสั่ง Google Cloud CLI เพื่อสร้างดัชนีเวกเตอร์ที่ขาดหายไป เรียกใช้คำสั่งเพื่อสร้างดัชนีที่ขาดหายไป
บทบาทและสิทธิ์
ก่อนที่จะสร้างดัชนีใน Cloud Firestore ได้ โปรดตรวจสอบว่าคุณได้รับมอบหมายบทบาทใดบทบาทหนึ่งต่อไปนี้
roles/datastore.ownerroles/datastore.indexAdminroles/editorroles/owner
หากคุณกำหนดบทบาทที่กำหนดเอง ให้มอบหมายสิทธิ์ทั้งหมดต่อไปนี้เพื่อสร้างดัชนี
datastore.indexes.createdatastore.indexes.deletedatastore.indexes.getdatastore.indexes.listdatastore.indexes.update
ใช้คอนโซล Firebase
วิธีสร้างดัชนีใหม่ด้วยตนเองจากคอนโซล Firebase

- ไปที่ส่วน Cloud Firestore ของ คอนโซล Firebase
- ไปที่แท็บดัชนี แล้วคลิกเพิ่มดัชนี
- ป้อนชื่อคอลเล็กชันและตั้งค่าช่องที่ต้องการใช้จัดลำดับดัชนี
- คลิกสร้าง
ช่องดั0}ต้อง เป็นไปตามข้อจำกัดของเส้นทางช่องconstraints on field paths
การสร้างดัชนีอาจใช้เวลา 2-3 นาที ทั้งนี้ขึ้นอยู่กับขนาดของการค้นหา หลังจากสร้างดัชนีแล้ว คุณจะเห็นดัชนีและสถานะของดัชนีในส่วนดัชนีผสม หากดัชนียังอยู่ระหว่างการสร้าง คอนโซล Firebase จะแสดงแถบสถานะการสร้าง
นำดัชนีออก
วิธีลบดัชนี
- ไปที่ส่วน Cloud Firestore ของ คอนโซล Firebase
- คลิกแท็บดัชนี
- วางเมาส์เหนือดัชนีที่ต้องการลบ แล้วเลือกลบ จากเมนูตามบริบท
- ยืนยันว่าต้องการลบโดยคลิกลบ จากการแจ้งเตือน
ใช้ Firebase CLI
นอกจากนี้ คุณยังทำให้ดัชนีใช้งานได้ด้วย Firebase CLI
หากต้องการเริ่มต้นใช้งาน ให้เรียกใช้ firebase init firestore ในไดเรกทอรีโปรเจ็กต์
ระหว่างการตั้งค่า Firebase CLI จะสร้างไฟล์ JSON ที่มีดัชนีเริ่มต้นในรูปแบบที่ถูกต้อง แก้ไขไฟล์เพื่อเพิ่มดัชนีเพิ่มเติมและทำให้ใช้งานได้ด้วยคำสั่ง firebase deploy
หากต้องการทำให้ดัชนีและกฎ Cloud Firestore เท่านั้นใช้งานได้ ให้เพิ่มแฟล็ก
--only firestore
หากคุณแก้ไขดัชนีโดยใช้คอนโซล Firebase โปรดตรวจสอบว่าได้อัปเดตไฟล์ดัชนีในเครื่องด้วย ดูข้อมูลอ้างอิงคำจำกัดความของดัชนี JSON
ใช้ Terraform
การสร้างดัชนีในฐานข้อมูล
ฐานข้อมูล Cloud Firestore สามารถมีดัชนีแบบช่องเดียว (อัตโนมัติ) และดัชนีแบบผสม (ที่สร้างด้วยตนเอง) คุณสามารถแก้ไขไฟล์กำหนดค่า Terraform เพื่อสร้างดัชนีสำหรับฐานข้อมูลได้ ดัชนีอัตโนมัติและดัชนีที่สร้างด้วยตนเองใช้ประเภททรัพยากร Terraform ที่แตกต่างกัน
(google_firestore_index
และ google_firestore_field)
ดัชนีแบบช่องเดียว (อัตโนมัติ)
ไฟล์กำหนดค่า Terraform ตัวอย่างต่อไปนี้จะสร้างดัชนีแบบช่องเดียวในช่อง name ในคอลเล็กชัน chatrooms
firestore.tf
resource "random_id" "variable"{
byte_length = 8
}
resource "google_firestore_field" "single-index" {
project = "project-id"
database = "database-id"
collection = "chatrooms_${random_id.variable.hex}"
field = "name"
index_config {
indexes {
order = "ASCENDING"
query_scope = "COLLECTION_GROUP"
}
indexes {
array_config = "CONTAINS"
}
}
ttl_config {}
}
- แทนที่ project-id ด้วยรหัสโปรเจ็กต์ รหัสโปรเจ็กต์ต้องไม่ซ้ำกัน
- แทนที่ database-id ด้วยรหัสฐานข้อมูล
ดัชนีแบบผสม (ที่สร้างด้วยตนเอง)
ไฟล์กำหนดค่า Terraform ตัวอย่างต่อไปนี้จะสร้างดัชนีแบบผสมสำหรับช่อง name และช่อง description ในคอลเล็กชัน chatrooms
firestore.tf
resource "google_firestore_index" "composite-index" {
project = "project-id"
database = "database-id"
collection = "chatrooms"
fields {
field_path = "name"
order = "ASCENDING"
}
fields {
field_path = "description"
order = "DESCENDING"
}
}
- แทนที่ project-id ด้วยรหัสโปรเจ็กต์ รหัสโปรเจ็กต์ต้องไม่ซ้ำกัน
- แทนที่ database-id ด้วยรหัสฐานข้อมูล
ดัชนีเวกเตอร์
ไฟล์กำหนดค่า Terraform ตัวอย่างต่อไปนี้จะสร้างดัชนีเวกเตอร์ในช่อง embedding ในคอลเล็กชัน chatrooms
firestore.tf
resource "google_firestore_index" "vector-index" {
project = "project-id"
database = "database-id"
collection = "chatrooms"
fields {
field_path = "__name__"
order = "ASCENDING"
}
fields {
field_path = "embedding"
vector_config {
dimension = 128
flat {}
}
}
}
- แทนที่ project-id ด้วยรหัสโปรเจ็กต์ รหัสโปรเจ็กต์ต้องไม่ซ้ำกัน
- แทนที่ database-id ด้วยรหัสฐานข้อมูล
เวลาบิลด์ดัชนี
หากต้องการสร้างดัชนี Cloud Firestore ต้องตั้งค่าดัชนีก่อน แล้วจึง ทดแทนดัชนีด้วยข้อมูลที่มีอยู่ เวลาบิลด์ดัชนีคือผลรวมของเวลาในการตั้งค่าและการทดแทนข้อมูล
การตั้งค่าดัชนีใช้เวลา 2-3 นาที เวลาในการสร้างดัชนีขั้นต่ำคือ 2-3 นาที แม้แต่สำหรับฐานข้อมูลที่ว่างเปล่า
เวลาในการทดแทนจะขึ้นอยู่กับปริมาณข้อมูลที่มีอยู่ซึ่งอยู่ในดัชนีใหม่ ค่าช่องที่ตรงกับคำจำกัดความของดัชนีมีจำนวนมากขึ้นเท่าใด การทดแทนดัชนีก็จะใช้เวลานานขึ้นเท่านั้น
การสร้างดัชนีเป็นการดำเนินการที่ใช้เวลานาน
หลังจากที่คุณเริ่มสร้างดัชนี Cloud Firestore จะกำหนดชื่อที่ไม่ซ้ำกันให้กับการดำเนินการ ชื่อการดำเนินการจะมีคำนำหน้าเป็น projects/[PROJECT_ID]/databases/(default)/operations/ เช่น
projects/project-id/databases/(default)/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 field เพื่อดูผลลัพธ์ของการดำเนินการ หากไม่ได้ตั้งค่าช่อง done ในการตอบกลับ ค่าของช่องจะเป็น false อย่าพึ่งพาการมีอยู่ของค่า done สำหรับการดำเนินการที่กำลังดำเนินการอยู่
ข้อผิดพลาดในการสร้างดัชนี
คุณอาจพบข้อผิดพลาดในการสร้างดัชนีเมื่อจัดการดัชนีที่สร้างด้วยตนเองและการยกเว้นดัชนีอัตโนมัติ การดำเนินการจัดทำดัชนีอาจล้มเหลวหาก Cloud Firestore พบปัญหาเกี่ยวกับข้อมูลที่กำลังจัดทำดัชนี ซึ่งส่วนใหญ่มักหมายความว่าคุณถึงขีดจำกัดของดัชนีแล้ว เช่น การดำเนินการอาจมีรายการดัชนีต่อเอกสารถึงจำนวนสูงสุดแล้ว
หากการสร้างดัชนีล้มเหลว คุณจะเห็นข้อความแสดงข้อผิดพลาดในคอนโซล หลังจาก ตรวจสอบแล้วว่าคุณไม่ได้ถึง ขีดจำกัดของดัชนี ให้ลองดำเนินการกับดัชนีอีกครั้ง