מידע נוסף על אינדקסים במהדורת Firestore Enterprise זמין במאמר סקירה כללית על אינדקסים.
לפני שמתחילים
כדי ליצור אינדקס ב-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 Database.
- בוחרים מסד נתונים מרשימת מסדי הנתונים.
- בכרטיסייה Indexes, לוחצים על Create Index.
- מזינים מזהה אוסף.
- מוסיפים נתיב שדה אחד או יותר ובוחרים אפשרות אינדקס לכל אחד מהם.
- בוחרים אפשרות לנוכחות של שדה: "לא דליל" או "דליל".
- לוחצים על יצירה.
- האינדקס החדש מוצג ברשימת האינדקסים, ו-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, נכנסים לדף Databases.
- בוחרים מסד נתונים מרשימת מסדי הנתונים.
- בתפריט הניווט, לוחצים על Indexes.
- אופציונלי: נותנים שם לאינדקס.
- עוברים אל סוג החיפוש ובוחרים באפשרות טקסט.
- מזינים מזהה אוסף.
- מגדירים שדה אחד או יותר להוספה לאינדקס.
- מגדירים את היקף השאילתה לאינדקס.
- בוחרים שפת ברירת מחדל.
- אופציונלי: מגדירים נתיב לשינוי השפה לשם של שדה שמכיל את הגדרת השפה של המסמך.
- לוחצים על יצירה.
- האינדקס החדש מוצג ברשימת האינדקסים, ו-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
-
במסוף Google Cloud, נכנסים לדף Databases.
- בוחרים מסד נתונים מרשימת מסדי הנתונים.
- בתפריט הניווט, לוחצים על Indexes.
- אופציונלי: נותנים שם לאינדקס.
- עוברים אל Search Type ובוחרים באפשרות Geo (2dsphere).
- מזינים מזהה אוסף.
- מגדירים שדה אחד או יותר להוספה לאינדקס.
- מגדירים את היקף השאילתה לאינדקס.
- לוחצים על יצירה.
האינדקס החדש מוצג ברשימת האינדקסים, ו-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
-
במסוף Firebase, נכנסים לדף Firestore Database.
- בוחרים מסד נתונים מרשימת מסדי הנתונים.
- לוחצים על הכרטיסייה Indexes.
- ברשימת האינדקסים, לוחצים על הלחצן More של האינדקס שרוצים למחוק ובוחרים באפשרות Delete.
- לוחצים על Delete Index.
gcloud CLI
כדי למצוא את שם האינדקס, משתמשים בפקודה
gcloud firestore indexes composite list.gcloud firestore indexes composite list \ --database='DATABASE_ID'
מחליפים את DATABASE_ID במזהה מסד הנתונים.
-
כדי למחוק את האינדקס, משתמשים בפקודה
gcloud firestore indexes composite delete.gcloud firestore indexes composite delete INDEX_NAME \ --database='DATABASE_ID'
מחליפים את מה שכתוב בשדות הבאים:
- INDEX_NAME: השם של האינדקס
- DATABASE_ID: מזהה מסד נתונים
משך הזמן של יצירת האינדקס
כדי ליצור אינדקס, Cloud Firestore צריך ליצור את האינדקס ואז למלא את רשומות האינדקס בנתונים קיימים. הזמן שנדרש ליצירת אינדקס נקבע לפי:
הזמן המינימלי ליצירת אינדקס הוא כמה דקות, גם במסד נתונים ריק.
הזמן שנדרש למילוי חוסרים של רשומות באינדקס תלוי בכמות הנתונים הקיימים ששייכים לאינדקס החדש. ככל שיש יותר ערכי שדות שתואמים להגדרת האינדקס, כך לוקח יותר זמן למלא את הרשומות באינדקס.
ניהול פעולות ממושכות
בניית אינדקסים היא פעולה ממושכת. בקטעים הבאים מוסבר איך לעבוד עם פעולות ארוכות טווח לאינדקסים.
אחרי שמתחילים ליצור אינדקס, Cloud Firestore מקצה לפעולה שם ייחודי. שמות הפעולות מתחילים בקידומת projects/PROJECT_ID/databases/DATABASE_ID/operations/, לדוגמה:
projects/PROJECT_ID/databases/DATABASE_ID/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
אפשר להשמיט את הקידומת כשמציינים שם של פעולה בפקודה describe.
רשימה של כל הפעולות הממושכות
כדי להציג רשימה של פעולות ארוכות, משתמשים בפקודה gcloud firestore operations list. הפקודה הזו מציגה רשימה של פעולות שמתבצעות כרגע ופעולות שהסתיימו לאחרונה.
הפעולות מופיעות ברשימה למשך כמה ימים אחרי שהן מסתיימות:
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 לא מוגדר בתגובה, הפעולה לא הושלמה.