ดูข้อมูลเพิ่มเติมเกี่ยวกับดัชนีของ Firestore Enterprise Edition ได้ที่ ภาพรวมของดัชนี
ก่อนเริ่มต้น
ก่อนที่จะสร้างดัชนีใน Cloud Firestore ได้ คุณต้องได้รับมอบหมายบทบาทใดบทบาทหนึ่งต่อไปนี้
roles/datastore.ownerroles/datastore.indexAdminroles/editorroles/owner
หากต้องการมอบหมายบทบาท โปรดดูหัวข้อให้สิทธิ์บทบาทเดียว ดูข้อมูลเพิ่มเติมเกี่ยวกับบทบาทของ Cloud Firestore และสิทธิ์ที่เกี่ยวข้องได้ที่บทบาทที่กำหนดไว้ล่วงหน้า
หากคุณกำหนดบทบาทที่กำหนดเองไว้ ให้มอบหมายสิทธิ์ทั้งหมดต่อไปนี้เพื่อสร้างดัชนี
datastore.indexes.createdatastore.indexes.deletedatastore.indexes.getdatastore.indexes.listdatastore.indexes.update
สร้างดัชนี
หากต้องการสร้างดัชนี ให้ทำตามขั้นตอนต่อไปนี้
คอนโซล Firebase
-
ในคอนโซล Firebase ให้ไปที่หน้าฐานข้อมูล Firestore
- เลือกฐานข้อมูลจากรายการฐานข้อมูล
- ในแท็บดัชนี ให้คลิกสร้างดัชนี
- ป้อนรหัสคอลเล็กชัน
- เพิ่มเส้นทางฟิลด์อย่างน้อย 1 เส้นทางและเลือกตัวเลือกดัชนีสำหรับแต่ละเส้นทาง
- เลือกตัวเลือกการมีอยู่ของฟิลด์ ไม่กระจัดกระจายหรือกระจัดกระจาย
- คลิกสร้าง
- ดัชนีใหม่จะแสดงในรายการดัชนีและ 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 เพื่อสร้างดัชนีข้อความ
ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล
เลือกฐานข้อมูลจากรายการฐานข้อมูล
ในเมนูการนำทาง ให้คลิกดัชนี
ไม่บังคับ: ป้อนชื่อดัชนี
ไปที่ประเภทการค้นหา แล้วเลือกข้อความ
ป้อนรหัสคอลเล็กชัน
กำหนดค่าฟิลด์อย่างน้อย 1 ฟิลด์ที่จะจัดทำดัชนี
กำหนดขอบเขตการค้นหาสำหรับดัชนี
เลือกภาษาเริ่มต้น
ไม่บังคับ: ตั้งค่าเส้นทางแทนที่ภาษาเป็นชื่อฟิลด์ที่มีการตั้งค่าภาษาของเอกสาร
คลิกสร้าง
ดัชนีใหม่จะแสดงในรายการดัชนีและ Cloud Firestore จะเริ่มสร้างดัชนี เมื่อสร้างดัชนีแล้ว คุณจะเห็นเครื่องหมายถูกสีเขียวข้างดัชนี
สร้างดัชนีเชิงพื้นที่
ใช้คอนโซล Google Cloud เพื่อสร้างดัชนีเชิงพื้นที่
ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล
เลือกฐานข้อมูลจากรายการฐานข้อมูล
ในเมนูการนำทาง ให้คลิกดัชนี
ไม่บังคับ: ป้อนชื่อดัชนี
ไปที่ประเภทการค้นหา แล้วเลือกภูมิศาสตร์ (2dsphere)
ป้อนรหัสคอลเล็กชัน
กำหนดค่าฟิลด์อย่างน้อย 1 ฟิลด์ที่จะจัดทำดัชนี
กำหนดขอบเขตการค้นหาสำหรับดัชนี
คลิกสร้าง
ดัชนีใหม่จะแสดงในรายการดัชนีและ Cloud Firestore จะเริ่มสร้างดัชนี เมื่อสร้างดัชนีแล้ว คุณจะเห็นเครื่องหมายถูกสีเขียวข้างดัชนี
ลบดัชนี
หากต้องการลบดัชนี ให้ทำตามขั้นตอนต่อไปนี้
คอนโซล Firebase
-
ในคอนโซล Firebase ให้ไปที่หน้าฐานข้อมูล Firestore
- เลือกฐานข้อมูลจากรายการฐานข้อมูล
- คลิกแท็บดัชนี
- ในรายการดัชนี ให้เลือกลบ จากปุ่มเพิ่มเติม สำหรับดัชนีที่ต้องการลบ
- คลิกลบดัชนี
gcloud CLI
หากต้องการค้นหาชื่อดัชนี ให้ใช้คำสั่ง
gcloud firestore indexes composite listgcloud firestore indexes composite list \ --database='DATABASE_ID'
แทนที่ DATABASE_ID ด้วยรหัสฐานข้อมูล
-
หากต้องการลบดัชนี ให้ใช้คำสั่ง
gcloud firestore indexes composite deletegcloud 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 ในการตอบกลับ แสดงว่าการดำเนินการยังไม่เสร็จสมบูรณ์