หน้านี้จะอธิบายวิธีจัดการดัชนี ดูข้อมูลเพิ่มเติมเกี่ยวกับดัชนีได้ที่ภาพรวมของดัชนี
ก่อนเริ่มต้น
ก่อนที่จะสร้างดัชนีใน Cloud Firestore ได้ โปรดตรวจสอบว่าคุณได้รับมอบหมายบทบาทใดบทบาทหนึ่งต่อไปนี้
roles/datastore.ownerroles/datastore.indexAdminroles/editorroles/owner
หากต้องการมอบบทบาท โปรดดูหัวข้อมอบบทบาทเดียว ดูข้อมูลเพิ่มเติมเกี่ยวกับบทบาท Cloud Firestore และสิทธิ์ที่เกี่ยวข้องได้ที่บทบาทที่กำหนดไว้ล่วงหน้า
หากคุณกำหนดบทบาทที่กำหนดเองไว้ ให้มอบหมายสิทธิ์ต่อไปนี้ทั้งหมดเพื่อสร้างดัชนี
datastore.indexes.createdatastore.indexes.deletedatastore.indexes.getdatastore.indexes.listdatastore.indexes.update
สร้างดัชนี
หากต้องการสร้างดัชนี ให้ทำตามขั้นตอนต่อไปนี้
MongoDB API
ใช้เมธอด createIndex() เพื่อสร้างดัชนี เช่น
-
db.restaurants.createIndex({"cuisine" : 1})
-
db.restaurants.createIndex({"cuisine" : 1}, {sparse: true})
-
นอกจากนี้ยังรองรับการสร้างดัชนีด้วย
db.runCommand()โดยมีดัชนีได้สูงสุด 1 รายการdb.runCommand({"createIndexes":"restaurant", "indexes": [{"key": {"cuisine":1}, "name": "cuisine_index"}]})
โปรดทราบข้อจำกัดต่อไปนี้
- คุณสร้างดัชนีได้เพียง 1 รายการต่อคำขอ ไม่รองรับ
db.collection.createIndexes() - บันทึกการตรวจสอบสำหรับการสร้างดัชนีด้วย MongoDB API จะใช้ชื่อเมธอด
google.firestore.admin.v1.FirestoreAdmin.CreateIndex - ดูตัวเลือกดัชนีที่รองรับได้ที่ดัชนีและพร็อพเพอร์ตี้ดัชนี
คอนโซล Firebase
-
ในคอนโซล Firebase ให้ไปที่หน้าฐานข้อมูล Firestore
- เลือกฐานข้อมูลจากรายการฐานข้อมูล
- ในแท็บดัชนี ให้คลิกสร้างดัชนี
- ป้อนรหัสคอลเล็กชัน
- เพิ่มเส้นทางฟิลด์อย่างน้อย 1 รายการ แล้วเลือกตัวเลือกดัชนีสำหรับแต่ละรายการ
- เลือกตัวเลือกการแสดงฟิลด์ ไม่ว่าจะเป็นแบบไม่กระจัดกระจายหรือกระจัดกระจาย
- คุณสามารถตั้งค่าตัวเลือกดัชนีแบบหลายคีย์ได้ (ไม่บังคับ)
- คลิกสร้าง
- ดัชนีใหม่จะแสดงในรายการดัชนี และ 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 รายการต่อคอลเล็กชัน แต่สามารถสร้างดัชนีหลายรายการที่มีประเภทแตกต่างกันใน 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 - หากคุณตั้งค่าภาษาเริ่มต้นเป็นอักขระ
nullCloud Firestore จะไม่ใช้ช่องใดๆ เป็นการลบล้างภาษา
ขยายเพื่อดูรายการภาษาที่รองรับ
| รหัสภาษา | ชื่อภาษา |
|---|---|
| "und" | ตรวจหาอัตโนมัติ |
| "af" | อาฟรีกานส์ |
| "ak" | อะคัน |
| "sq" | แอลเบเนีย |
| "am" | อัมฮาริก |
| "ar" | อาหรับ |
| "hy" | อาร์เมเนีย |
| "az" | อาเซอร์ไบจาน |
| "eu" | บาสก์ |
| "be" | เบลารุส |
| "bn" | บังคลา |
| "bs" | บอสเนีย |
| "bg" | บัลแกเรีย |
| "my" | พม่า |
| "ca" | คาตาลัน |
| "ceb" | เซบู |
| "chr" | เชอโรกี |
| "zh" | จีน |
| "zh-Hant" | จีน (ตัวเต็ม) |
| "hr" | โครเอเชีย |
| "cs" | เช็ก |
| "da" | เดนมาร์ก |
| "nl" | ดัตช์ |
| "th" | อังกฤษ |
| "eo" | เอสเปอแรนโต |
| "et" | เอสโตเนีย |
| "fil" | ฟิลิปปินส์ |
| "fi" | ฟินแลนด์ |
| "th" | ฝรั่งเศส |
| "gl" | กาลิเชียน |
| "ka" | จอร์เจีย |
| "de" | เยอรมัน |
| "el" | กรีก |
| "gu" | คุชราต |
| "ht" | Haitian_Creole |
| "ฮ่า" | เฮาซา |
| "haw" | ฮาวายเอี้ยน |
| "iw" | ฮีบรู |
| "สวัสดี" | ฮินดี |
| "hmn" | ม้ง |
| "hu" | ฮังการี |
| "is" | ไอซ์แลนด์ |
| "ig" | อิกโบ |
| "id" | อินโดนีเซีย |
| "ga" | ไอร์แลนด์ |
| "it" | อิตาลี |
| "ja" | ญี่ปุ่น |
| "jv" | ชวา |
| "kn" | กันนาดา |
| "kk" | คาซัค |
| "km" | เขมร |
| "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ในดัชนีข้อความ ผู้ใช้จะค้นหาเมืองที่เจาะจงได้พาร์ติชันต้องมีเพียงช่องเดียว หากแบ่งพาร์ติชันดัชนี คุณจะเรียกใช้ได้เฉพาะการค้นหาที่ระบุฟิลด์ที่แบ่งพาร์ติชันไว้เท่านั้น
ข้อจำกัด
- คุณสร้างดัชนีได้เพียง 1 รายการต่อคำขอ
- บันทึกการตรวจสอบสำหรับการสร้างดัชนีด้วย MongoDB API จะใช้ชื่อเมธอด
google.firestore.admin.v1.FirestoreAdmin.CreateIndex - ดูตัวเลือกดัชนีที่รองรับได้ที่ดัชนีและพร็อพเพอร์ตี้ดัชนี
คอนโซล Firebase
ในคอนโซล Firebase ให้ไปที่หน้าฐานข้อมูล Firestore
เลือกฐานข้อมูลจากรายการฐานข้อมูล
ในแท็บดัชนี ให้คลิกสร้างดัชนี
ป้อนรหัสคอลเล็กชัน
เพิ่มเส้นทางฟิลด์อย่างน้อย 1 รายการ แล้วเลือกตัวเลือกดัชนีสำหรับแต่ละรายการ
คลิกสร้าง
ดัชนีใหม่จะแสดงในรายการดัชนี และการดำเนินการที่เข้ากันได้กับ MongoDB จะเริ่มสร้างดัชนี เมื่อสร้างดัชนีแล้ว คุณจะเห็นเครื่องหมายถูกสีเขียวข้างดัชนี หากไม่ได้สร้างดัชนี โปรดดูสาเหตุที่เป็นไปได้ที่หัวข้อข้อผิดพลาดในการสร้างดัชนี
gcloud CLI
หากต้องการสร้างดัชนีข้อความ ให้ใช้คำสั่ง gcloud firestore indexes composite create ตั้งค่า --api-scope เป็น mongodb-compatible-api
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"}]}}' \ --api-scope=mongodb-compatible-api \ --search-index-options=text-language=en \ --async
แทนที่ค่าต่อไปนี้
- DATABASE_ID: รหัสฐานข้อมูล
- COLLECTION_GROUP: รหัสของคอลเล็กชันที่จะจัดทำดัชนี
- FIELD_NAME: ชื่อของช่องที่จะจัดทำดัชนี
แฟล็ก --async จะเรียกใช้การดำเนินการสร้างดัชนีในเบื้องหลัง
สร้างดัชนี 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เพื่อให้ผู้ใช้ค้นหาร้านอาหารในภูมิภาคของตนได้หากแบ่งพาร์ติชันดัชนี คุณจะเรียกใช้การค้นหาได้เฉพาะในกรณีที่มีการระบุฟิลด์ที่แบ่งพาร์ติชันไว้เท่านั้น
ข้อจำกัด
- คุณสร้างดัชนีได้เพียง 1 รายการต่อคำขอ
- บันทึกการตรวจสอบสำหรับการสร้างดัชนีด้วย MongoDB API จะใช้ชื่อเมธอด
google.firestore.admin.v1.FirestoreAdmin.CreateIndex - ดูตัวเลือกดัชนีที่รองรับได้ที่ดัชนีและพร็อพเพอร์ตี้ดัชนี
คอนโซล Firebase
ในคอนโซล Firebase ให้ไปที่หน้าฐานข้อมูล Firestore
เลือกฐานข้อมูลจากรายการฐานข้อมูล
ในแท็บดัชนี ให้คลิกสร้างดัชนี
ป้อนรหัสคอลเล็กชัน
เพิ่มเส้นทางฟิลด์อย่างน้อย 1 รายการ แล้วเลือกตัวเลือกดัชนีสำหรับแต่ละรายการ
คลิกสร้าง
ดัชนีใหม่จะแสดงในรายการดัชนี และการดำเนินการที่เข้ากันได้กับ MongoDB จะเริ่มสร้างดัชนี เมื่อสร้างดัชนีแล้ว คุณจะเห็นเครื่องหมายถูกสีเขียวข้างดัชนี หากไม่ได้สร้างดัชนี โปรดดูสาเหตุที่เป็นไปได้ที่หัวข้อข้อผิดพลาดในการสร้างดัชนี
gcloud CLI
หากต้องการสร้างดัชนี 2dsphere ให้ใช้คำสั่ง gcloud firestore indexes composite create ตั้งค่า --api-scope เป็น mongodb-compatible-api
gcloud firestore indexes composite create \
--database='DATABASE_ID' \
--collection-group=COLLECTION_GROUP \
--field-config=field-path=FIELD_NAME,search-config='{"geo-spec": {}}' \
--api-scope=mongodb-compatible-api \
--asyncแทนที่ค่าต่อไปนี้
- DATABASE_ID: รหัสฐานข้อมูล
- COLLECTION_GROUP: รหัสของคอลเล็กชันที่จะจัดทำดัชนี
- FIELD_NAME: ชื่อของช่องที่จะจัดทำดัชนี
แฟล็ก --async จะเรียกใช้การดำเนินการสร้างดัชนีในเบื้องหลัง
ลบดัชนี
หากต้องการลบดัชนี ให้ทำตามขั้นตอนต่อไปนี้
MongoDB API
ใช้เมธอด dropIndex() เพื่อลบดัชนี เช่น
ลบดัชนีโดยใช้ชื่อดัชนี
db.restaurants.dropIndex("cuisine_index")
ลบดัชนีโดยใช้คำจำกัดความของดัชนี
db.restaurants.dropIndex({"cuisine" : 1})
คอนโซล 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 ในการตอบกลับ แสดงว่าการดำเนินการยังไม่เสร็จสมบูรณ์