כשמבצעים שאילתות חיפוש גדולות, חשוב לעדכן את האינדקסים כדי שהמידע יהיה תמיד מדויק. יש כמה דרכים לעדכן את האינדקסים של חיפוש וקטורי:
- החלפה של אינדקס שלם
- עדכון חלקי של אינדקס של קבוצת פריטים
- עדכון חלקי של אינדקס סטרימינג
- עדכון מטא-נתונים של אינדקס
החלפת אינדקס שלם
כדי להחליף את התוכן של חבילת עדכונים או סטרימינג קיימת Index, משתמשים בשיטה IndexService.UpdateIndex.
- מגדירים את
Index.metadata.contentsDeltaUriל-URI של Cloud Storage שכולל את הווקטורים שרוצים לעדכן. - מגדירים את
Index.metadata.isCompleteOverwriteלערך true. אם הערך הוא true, כל האינדקס מוחלף לחלוטין בקובץ המטא-נתונים החדש שסיפקתם.
gcloud
- מעדכנים את קובץ המטא-נתונים של האינדקס כדי להגדיר את הערכים
contentsDeltaUriו-isCompleteOverwrite=true. - משתמשים בפקודה
gcloud ai indexes update.
לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:
- LOCAL_PATH_TO_METADATA_FILE: הנתיב המקומי לקובץ המטא-נתונים.
- INDEX_ID: מזהה האינדקס.
- LOCATION: האזור שבו משתמשים ב-Agent Platform.
- PROJECT_ID: מזהה הפרויקט ב- Cloud de Confiance by S3NS .
מריצים את הפקודה הבאה:
Linux, macOS או Cloud Shell
gcloud ai indexes update INDEX_ID \ --metadata-file=LOCAL_PATH_TO_METADATA_FILE \ --region=LOCATION \ --project=PROJECT_ID
Windows (PowerShell)
gcloud ai indexes update INDEX_ID ` --metadata-file=LOCAL_PATH_TO_METADATA_FILE ` --region=LOCATION ` --project=PROJECT_ID
Windows (cmd.exe)
gcloud ai indexes update INDEX_ID ^ --metadata-file=LOCAL_PATH_TO_METADATA_FILE ^ --region=LOCATION ^ --project=PROJECT_ID
REST
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- INPUT_DIR: נתיב הספרייה ב-Cloud Storage של תוכן האינדקס.
- INDEX_ID: מזהה האינדקס.
- LOCATION: האזור שבו משתמשים ב-Agent Platform.
- PROJECT_ID: מזהה הפרויקט ב- Cloud de Confiance by S3NS .
- PROJECT_NUMBER: מספר הפרויקט שנוצר באופן אוטומטי.
ה-method של ה-HTTP וכתובת ה-URL:
PATCH https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/indexes/INDEX_ID
תוכן בקשת JSON:
{
"metadata": {
"contentsDeltaUri": "INPUT_DIR",
"isCompleteOverwrite": true
}
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אתם אמורים לקבל תגובת JSON שדומה לזו:
{
"name": "projects/PROJECT_NUMBER/locations/LOCATION/indexes/INDEX_ID/operations/OPERATION_ID",
"metadata": {
"@type": "type.googleapis.com/google.cloud.aiplatform.v1.UpdateIndexOperationMetadata",
"genericMetadata": {
"createTime": "2022-01-12T23:56:14.480948Z",
"updateTime": "2022-01-12T23:56:14.480948Z"
}
}
}
Python
במאמר התקנת Vertex AI SDK ל-Python מוסבר איך להתקין או לעדכן את Vertex AI SDK ל-Python. מידע נוסף מופיע ב מאמרי העזרה של Python API.
כשמפעילים את השיטה שבהמשך, צריך להגדיר את is_complete_overwrite=True כך שיחליף באופן מלא את התוכן של האינדקס.
המסוף
כדי לעדכן תוכן של אינדקס אצווה, פועלים לפי ההוראות הבאות.
- בקטע Agent Platform במסוף Cloud de Confiance , עוברים לקטע Deploy and Use. בוחרים באפשרות חיפוש וקטורי.
- בוחרים את האינדקס שרוצים לעדכן. ייפתח הדף פרטי האינדקס.
- לוחצים על עריכת האינדקס. תיפתח חלונית לעריכת האינדקס.
- בשדה Cloud Storage, מחפשים את תיקיית Cloud Storage שבה מאוחסנים נתוני הווקטור ובוחרים אותה.
- מסמנים את התיבה 'החלפת כל הנתונים' כדי להחליף את כל הנתונים הקיימים.
- לוחצים על עדכון.
- לוחצים על סיום כדי לסגור את החלונית.
עדכון חלקי של אינדקס של חבילת בקשות
כדי לעדכן את ההטמעות של קבוצת נתונים קיימת Index, משתמשים בשיטה IndexService.UpdateIndex.
- מגדירים את
Index.metadata.contentsDeltaUriל-URI של Cloud Storage שכולל את הווקטורים שרוצים לעדכן. - מגדירים את
Index.metadata.isCompleteOverwriteלערך false.
רק הווקטורים שצוינו ב-Index.metadata.contentsDeltaUri מתעדכנים, מתווספים או נמחקים. ההטמעות הקיימות האחרות באינדקס יישארו.
gcloud
- מעדכנים את קובץ המטא-נתונים של האינדקס כדי להגדיר את
contentsDeltaUri. - משתמשים בפקודה
gcloud ai indexes update.
לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:
- LOCAL_PATH_TO_METADATA_FILE: הנתיב המקומי לקובץ המטא-נתונים.
- INDEX_ID: מזהה האינדקס.
- LOCATION: האזור שבו משתמשים ב-Agent Platform.
- PROJECT_ID: מזהה הפרויקט ב- Cloud de Confiance by S3NS .
מריצים את הפקודה הבאה:
Linux, macOS או Cloud Shell
gcloud ai indexes update INDEX_ID \ --metadata-file=LOCAL_PATH_TO_METADATA_FILE \ --region=LOCATION \ --project=PROJECT_ID
Windows (PowerShell)
gcloud ai indexes update INDEX_ID ` --metadata-file=LOCAL_PATH_TO_METADATA_FILE ` --region=LOCATION ` --project=PROJECT_ID
Windows (cmd.exe)
gcloud ai indexes update INDEX_ID ^ --metadata-file=LOCAL_PATH_TO_METADATA_FILE ^ --region=LOCATION ^ --project=PROJECT_ID
REST
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- INPUT_DIR: נתיב הספרייה ב-Cloud Storage של תוכן האינדקס.
- INDEX_ID: מזהה האינדקס.
- LOCATION: האזור שבו משתמשים ב-Agent Platform.
- PROJECT_ID: מזהה הפרויקט ב- Cloud de Confiance by S3NS .
- PROJECT_NUMBER: מספר הפרויקט שנוצר באופן אוטומטי.
ה-method של ה-HTTP וכתובת ה-URL:
PATCH https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/indexes/INDEX_ID
תוכן בקשת JSON:
{
"metadata": {
"contentsDeltaUri": "INPUT_DIR",
"isCompleteOverwrite": false
}
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אתם אמורים לקבל תגובת JSON שדומה לזו:
{
"name": "projects/PROJECT_NUMBER/locations/LOCATION/indexes/INDEX_ID/operations/OPERATION_ID",
"metadata": {
"@type": "type.googleapis.com/google.cloud.aiplatform.v1.UpdateIndexOperationMetadata",
"genericMetadata": {
"createTime": "2022-01-12T23:56:14.480948Z",
"updateTime": "2022-01-12T23:56:14.480948Z"
}
}
}
Python
במאמר התקנת Vertex AI SDK ל-Python מוסבר איך להתקין או לעדכן את Vertex AI SDK ל-Python. מידע נוסף מופיע ב מאמרי העזרה של Python API.
כשמפעילים את השיטה שבהמשך, מגדירים את הערך is_complete_overwrite=False.
המסוף
כדי לעדכן תוכן של אינדקס אצווה, פועלים לפי ההוראות הבאות.
- בקטע Agent Platform במסוף Cloud de Confiance , עוברים לקטע Deploy and Use. בוחרים באפשרות חיפוש וקטורי.
- בוחרים את האינדקס שרוצים לעדכן. ייפתח הדף פרטי האינדקס.
- לוחצים על עריכת האינדקס. תיפתח חלונית לעריכת האינדקס.
- בשדה Cloud Storage, מחפשים את תיקיית Cloud Storage שבה מאוחסנים נתוני הווקטור ובוחרים אותה.
- מוודאים שהתיבה 'החלפה מלאה' לא מסומנת.
- לוחצים על עדכון.
- לוחצים על סיום כדי לסגור את החלונית.
אם ל-Index יש פריסות משויכות (ראו את השדה Index.deployed_indexes), אז כשמבצעים שינויים מסוימים ב-Index המקורי, ה-DeployedIndex מתעדכן באופן אוטומטי ברקע באופן אסינכרוני כדי לשקף את השינויים האלה.
כדי לבדוק אם השינוי הועבר, משווים בין זמן הסיום של פעולת עדכון האינדקס לבין DeployedIndex.index_sync_time.
עדכון חלקי של אינדקס סטרימינג
בעזרת עדכוני סטרימינג, אפשר לעדכן את האינדקס ולבצע בו שאילתות תוך כמה שניות. בשלב הזה, אי אפשר להשתמש בעדכונים בזמן אמת באינדקס קיים של עדכונים באצווה. צריך ליצור אינדקס חדש. מידע נוסף זמין במאמר בנושא יצירת אינדקס לעדכון בסטרימינג.
החיוב הוא 0.45 $לכל GB שמשמש לעדכונים בסטרימינג. מידע נוסף על התמחור זמין בדף התמחור של Agent Platform. העדכונים של הסטרימינג מוחלים ישירות על האינדקסים שנפרסו בזיכרון, ואז משתקפים בתוצאות השאילתות אחרי השהיה קצרה.
הוספה או עדכון של נקודות נתונים
בדוגמאות האלה אפשר לראות איך לבצע פעולת upsert של נקודת נתונים. חשוב לזכור ש-upsert-datapoints
מקבל רק JSON בפורמט מערך.
Python
Python
Curl
מגבלת המכסה של קצב העברת הנתונים מתייחסת לכמות הנתונים שנכללים בפעולת upsert. אם מזהה נקודה על הגרף קיים באינדקס, ההטמעה מתעדכנת. אחרת, מתווספת הטמעה חדשה.
DATAPOINT_ID_1=
DATAPOINT_ID_2=
curl -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`" https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/indexes/${INDEX_ID}:upsertDatapoints \
-d '{datapoints: [{datapoint_id: "'${DATAPOINT_ID_1}'", feature_vector: [...]},
{datapoint_id: "'${DATAPOINT_ID_2}'", feature_vector: [...]}]}'
בחיפוש היברידי, יש תמיכה בייצוגים של הטמעה דלילה וצפופה של נקודת נתונים. בפעולת upsert, השמטה של הטמעה צפופה מוחקת את הייצוג הצפוף, והשמטה של הטמעה דלילה מוחקת את הייצוג הדליל.
בדוגמה הזו מתבצע עדכון של הטמעות צפופות והטמעות דלילות.
curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`" https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/indexes/${INDEX_ID}:upsertDatapoints -d '{datapoints: [{datapoint_id: "111", feature_vector: [0.111, 0.111], "sparse_embedding": {"values": [111.0,111.1,111.2], "dimensions": [10,20,30]}}]}'
בדוגמה הזו מתבצע עדכון של הטמעות צפופות והסרה של הטמעות דלילות.
curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`" https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/indexes/${INDEX_ID}:upsertDatapoints -d '{datapoints: [{datapoint_id: "111", feature_vector: [0.111, 0.111]}]}'
בדוגמה הזו מתבצע עדכון של הטמעות דלילות והסרה של הטמעות צפופות.
curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`" https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/indexes/${INDEX_ID}:upsertDatapoints -d '{datapoints: [{datapoint_id: "111", "sparse_embedding": {"values": [111.0,111.1,111.2], "dimensions": [10,20,30]}}]}'
המסוף
המסוף
כדי לעדכן תוכן באינדקס סטרימינג, צריך לפעול לפי ההוראות הבאות.
- במסוף Cloud de Confiance , עוברים לדף חיפוש וקטורי.
- בוחרים את האינדקס שרוצים לעדכן. ייפתח הדף פרטי האינדקס.
- לוחצים על עריכת האינדקס. תיפתח חלונית לעריכת האינדקס.
- בחלונית, בוחרים בכרטיסייה Upsert data point (הוספה או עדכון של נקודה על הגרף) כדי להוסיף תוכן.
- מזינים את המזהה של נקודת הנתונים.
- מזינים לפחות סוג אחד של הטמעה:
- הטמעה צפופה: מזינים מערך של ערכים מופרדים בפסיקים של נקודות צפות. מספר הערכים צריך להתאים למימדים של האינדקס.
- הטמעה דלילה:
- מזינים את המימדים של ההטמעה הדלילה כמערך של מספרים שלמים מופרדים בפסיקים. מספר הערכים לא חייב להיות זהה למספר הממדים של האינדקס.
- צריך להזין ערכים כמערך של ערכים מסוג נקודה צפה שמופרדים בפסיקים. מספר הערכים צריך להיות זהה למספר המימדים של ההטמעה הדלילה.
- אופציונלי: כדי להפעיל סינון לפי הגבלות על טוקנים בנקודה על הגרף הזו, לוחצים על הוספת הגבלת טוקן, ואז מזינים מרחב שמות ומחרוזות מופרדות בפסיקים כטוקנים.
- אופציונלי: כדי להפעיל סינון לפי הגבלות מספריות בנקודה על הגרף הזו, לוחצים על הוספת הגבלה מספרית, מזינים מרחב שמות, בוחרים סוג מספר ומזינים ערך.
- אופציונלי: כדי למנוע הצגת תוצאות דומות רבות, מזינים מחרוזת תגים של הצטברות.
- לוחצים על Upsert (עדכון והוספה).
- לוחצים על סיום כדי לסגור את החלונית.
מגבלת המכסה של קצב העברת הנתונים מתייחסת לכמות הנתונים שנכללים בפעולת upsert. אם מזהה נקודה על הגרף קיים באינדקס, ההטמעה מתעדכנת. אחרת, מתווספת הטמעה חדשה.
עדכון המטא-נתונים של ההטמעה
יכולות להיות הרבה סיבות לכך שתרצו לעדכן את ההגבלות על סטרימינג או את ההגבלות המספריות. לדוגמה, כשעובדים עם נתונים בכמות גדולה שמשתנים במהירות, כדאי לתת עדיפות למקורות נתונים מסוימים. עדכון ישיר של הגבלות או הגבלות מספריות מאפשר לכם לשפר את המיקוד בזמן אמת, כדי לוודא שהנתונים הכי חשובים יעברו עיבוד או יודגשו באופן מיידי.
אתם יכולים לעדכן ישירות את ההגבלות על נקודות על הגרף ואת ההגבלות המספריות בתוך אינדקס של סטרימינג, בלי לשלם את עלות הדחיסה של עדכון מלא.
כדי לבצע עדכונים כאלה של מטא-נתונים בלבד, צריך להוסיף את השדה update_mask לבקשה. הערך של update_mask חייב להיות all_restricts.
הערכים של הגבלת הגישה וההגבלה המספרית שמוגדרים בנקודות הנתונים צריכים להיות הערכים החדשים שרוצים להחיל בעדכון.
בדוגמה הבאה אפשר לראות איך מוסיפים הגבלות לשתי נקודות נתונים קיימות.
DATAPOINT_ID_1=
DATAPOINT_ID_2=
curl -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`" https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/indexes/${INDEX_ID}:upsertDatapoints \
-d '{datapoints:
[{datapoint_id: "'${DATAPOINT_ID_1}'", feature_vector: [...], restricts:[{namespace: "color", allow_list: ["red"]}]},
{datapoint_id: "'${DATAPOINT_ID_2}'", feature_vector: [...], restricts:[{namespace: "color", allow_list: ["red"]}]}
], update_mask: "all_restricts"}'
הסרת נקודות על הגרף
יכול להיות שתצטרכו להסיר נקודות נתונים מהאינדקס של השידור. אפשר לעשות את זה באמצעות curl או ממסוף Cloud de Confiance .
תרחיש שימוש מרכזי למחיקת נקודה על הגרף מאינדקס הוא שמירה על שוויון בין האינדקס לבין המקור שלו בעולם האמיתי. נניח שיש מוכר ספרים שמשתמש בהטמעת וקטורים כדי לייצג את מלאי הספרים שלו למטרות חיפוש והמלצה. כשספר אזל מהמלאי או הוסר מהמלאי, מחיקת נקודת הנתונים התואמת שלו מהאינדקס מבטיחה שתוצאות החיפוש וההמלצות יישארו מדויקות ועדכניות.
Curl
curl -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`" https://{LOCATION}-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/{REGION}/indexes/{INDEX_ID}:removeDatapoints -d '{datapoint_ids: ["'{DATAPOINT_ID_1}'", "'{DATAPOINT_ID_2}'"]}'
המסוף
המסוף
כדי למחוק נקודה על הגרף מאינדקס של סטרימינג, צריך לפעול לפי ההוראות האלה.
- בקטע Agent Platform במסוף Cloud de Confiance , עוברים לקטע Deploy and Use. בוחרים באפשרות חיפוש וקטורי.
- בוחרים את אינדקס הסטרימינג שרוצים לעדכן. ייפתח הדף פרטי האינדקס.
- לוחצים על עריכת האינדקס. תיפתח חלונית לעריכת האינדקס.
- בחלונית, בוחרים בכרטיסייה הסרת נקודות נתונים.
- אפשר להוסיף עד 20 נקודות על הגרף על ידי הזנת רשימה של מזהי נקודות על הגרף, מופרדים בפסיקים
- לוחצים על הסרה.
- לוחצים על סיום כדי לסגור את החלונית.
Python
Python
עדכון המטא-נתונים של האינדקס
אפשר להשתמש ב-IndexService.UpdateIndex גם כדי לעדכן את שדות המטא-נתונים display_name, description ו-labels לאינדקסים של עיבוד באצווה ושל סטרימינג. הערה: קריאה אחת ל-UpdateIndex יכולה לעדכן את ההטמעות של האינדקס או את שדות המטא-נתונים האלה, אבל לא את שניהם בו-זמנית.
gcloud
לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:
- LOCAL_PATH_TO_METADATA_FILE: הנתיב המקומי לקובץ המטא-נתונים.
- INDEX_ID: מזהה האינדקס.
- LOCATION: האזור שבו משתמשים ב-Agent Platform.
- PROJECT_ID: מזהה הפרויקט ב- Cloud de Confiance by S3NS .
מריצים את הפקודה הבאה:
Linux, macOS או Cloud Shell
gcloud ai indexes update INDEX_ID \ --metadata-file=LOCAL_PATH_TO_METADATA_FILE \ --region=LOCATION \ --project=PROJECT_ID
Windows (PowerShell)
gcloud ai indexes update INDEX_ID ` --metadata-file=LOCAL_PATH_TO_METADATA_FILE ` --region=LOCATION ` --project=PROJECT_ID
Windows (cmd.exe)
gcloud ai indexes update INDEX_ID ^ --metadata-file=LOCAL_PATH_TO_METADATA_FILE ^ --region=LOCATION ^ --project=PROJECT_ID
REST
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- INPUT_DIR: נתיב הספרייה ב-Cloud Storage של תוכן האינדקס.
- INDEX_ID: מזהה האינדקס.
- LOCATION: האזור שבו משתמשים ב-Agent Platform.
- PROJECT_ID: מזהה הפרויקט ב- Cloud de Confiance by S3NS .
- PROJECT_NUMBER: מספר הפרויקט שנוצר באופן אוטומטי.
ה-method של ה-HTTP וכתובת ה-URL:
PATCH https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/indexes/INDEX_ID
תוכן בקשת JSON:
{
"metadata": {
"description": "Updated description",
"display_name": "Updated display name"
}
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אתם אמורים לקבל תגובת JSON שדומה לזו:
{
"name": "projects/PROJECT_NUMBER/locations/LOCATION/indexes/INDEX_ID/operations/OPERATION_ID",
"metadata": {
"@type": "type.googleapis.com/google.cloud.aiplatform.v1.UpdateIndexOperationMetadata",
"genericMetadata": {
"createTime": "2022-01-12T23:56:14.480948Z",
"updateTime": "2022-01-12T23:56:14.480948Z"
}
}
}
Python
המסוף
אפשר להשתמש בהוראות האלה כדי לעדכן את המטא-נתונים של האינדקס (המסוף מוגבל לעדכון של display_name ושל description).
- בקטע Agent Platform במסוף Cloud de Confiance , עוברים לקטע Deploy and Use. בוחרים באפשרות חיפוש וקטורי.
- בוחרים את האינדקס שרוצים לעדכן. ייפתח הדף פרטי האינדקס.
- לוחצים על עריכת האינדקס. תיפתח חלונית לעריכת האינדקס.
- מעדכנים את שדות המטא-נתונים הרצויים.
- לוחצים על עדכון.
- לוחצים על סיום כדי לסגור את החלונית.
דחיסה
האינדקס נבנה מחדש מדי פעם כדי לכלול את כל העדכונים החדשים מאז הבנייה האחרונה. הבנייה מחדש הזו, או 'דחיסה', משפרת את הביצועים והאמינות של השאילתות. פעולות דחיסה מתבצעות גם בעדכונים בזמן אמת וגם בעדכונים של חבילות.
עדכון סטרימינג: בחיפוש וקטורי נעשה שימוש במדדים מבוססי היוריסטיקה כדי לקבוע מתי להפעיל דחיסה. אם הנתונים הכי ישנים שלא עברו דחיסה הם בני חמישה ימים, הדחיסה תופעל תמיד. תחויבו בעלות של בנייה מחדש של האינדקס באותו תעריף של חבילת עדכונים, בנוסף לעלויות של עדכון בסטרימינג.
חבילת עדכונים: מתרחש כשגודל קבוצת הנתונים המצטברת גדול מ-20% מגודל קבוצת הנתונים הבסיסית.
בנייה מחדש של האינדקס והפעלת שאילתה
אפשר לשלוח בקשות התאמה או בקשות התאמה מקובצות כרגיל באמצעות grpc cli, ספריית הלקוח או Agent Platform SDK ל-Python. אחרי שבונה מחדש את השאילתה, העדכונים אמורים להופיע תוך כמה שניות. מידע נוסף על שאילתות באינדקס זמין במאמר שאילתות באינדקס כדי לקבל את השכנים הקרובים ביותר.
שדות אופציונליים
כשיוצרים אינדקס, יש כמה שדות אופציונליים שאפשר להשתמש בהם כדי לדייק את השאילתות.
פעולת Upsert עם הגבלות
הוספה של פעולת Upsert לאינדקס והוספה של הגבלה הן דרך לתיוג נקודות הנתונים, כך שהן כבר מזוהות לצורך סינון בזמן השאילתה. כדאי להוסיף תגי הגבלה כדי להגביל את התוצאות שמוצגות בנתונים לפני שליחת שאילתה. לדוגמה, לקוח רוצה להריץ שאילתה באינדקס, אבל רוצה לוודא שבתוצאות יוצגו רק פריטים שתואמים ל'אדום' בחיפוש של הנעלה. בדוגמה הבאה, האינדקס עובר פעולת upsert ומסנן את כל הנעליים האדומות, אבל לא מאפשר הצגה של נעליים כחולות. כך תוכלו לוודא שהמסננים יחפשו את האפשרויות הספציפיות הטובות ביותר מתוך אינדקס גדול ומגוון לפני ההפעלה.
בנוסף להגבלות על טוקנים, בדוגמה נעשה שימוש בהגבלות מספריות. במקרה הזה, נקודת הנתונים משויכת למחיר של 20, לאורך של 0.3 ולרוחב של 0.5. בזמן השאילתה, אפשר להשתמש בהגבלות המספריות האלה כדי לסנן את התוצאות ולהגביל את תוצאות השאילתה לפי ערכי המחיר, האורך והרוחב. לדוגמה, נקודת הנתונים הזו תופיע בשאילתה שמסננת לפי מחיר > 25, אורך < 1 ורוחב < 1.
מידע נוסף על סינון זמין במאמר חיפוש וקטורי להוספה לאינדקס.
Python
# Upsert datapoints
_TEST_DATAPOINT_1 = aiplatform_v1.types.index.IndexDatapoint(
datapoint_id="3",
feature_vector=[0.00526886899, -0.0198396724],
restricts=[
aiplatform_v1.types.index.IndexDatapoint.Restriction(namespace="Color", allow_list=["red"])
],
numeric_restricts=[
aiplatform_v1.types.index.IndexDatapoint.NumericRestriction(
namespace="cost",
value_int=1,
)
],
)
_TEST_DATAPOINT_2 = aiplatform_v1.types.index.IndexDatapoint(
datapoint_id="4",
feature_vector=[0.00526886899, -0.0198396724],
numeric_restricts=[
aiplatform_v1.types.index.IndexDatapoint.NumericRestriction(
namespace="cost",
value_double=0.1,
)
],
crowding_tag=aiplatform_v1.types.index.IndexDatapoint.CrowdingTag(crowding_attribute="crowding"),
)
_TEST_DATAPOINT_3 = aiplatform_v1.types.index.IndexDatapoint(
datapoint_id="5",
feature_vector=[0.00526886899, -0.0198396724],
numeric_restricts=[
aiplatform_v1.types.index.IndexDatapoint.NumericRestriction(
namespace="cost",
value_float=1.1,
)
],
)
_TEST_DATAPOINTS = [_TEST_DATAPOINT_1, _TEST_DATAPOINT_2, _TEST_DATAPOINT_3]
my_streaming_index = my_streaming_index.upsert_datapoints(datapoints=_TEST_DATAPOINTS)
# Dynamic metadata update
_TEST_DATAPOINT_4 = aiplatform_v1.types.index.IndexDatapoint(
datapoint_id="-2",
numeric_restricts=[
aiplatform_v1.types.index.IndexDatapoint.NumericRestriction(
namespace="cost",
value_float=1.1,
)
],
)
my_streaming_index = my_streaming_index.upsert_datapoints(datapoints=[_TEST_DATAPOINT4], update_mask=["all_restricts"])
curl
curl -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`" https://${ENDPOINT}/v1/projects/${PROJECT_ID}/locations/us-central1/indexes/${INDEX_ID}:upsertDatapoints \
-d '{
datapoints: [
{
datapoint_id: "'${DATAPOINT_ID_1}'",
feature_vector: [...],
restricts: { namespace: "color", allow_list: ["red"], deny_list: ["blue"]},
numeric_restricts: [{namespace: "price", value_int: 20}, {namespace: "length", value_float: 0.3}, {namespace: "width", value_double: 0.5}]
}
]}'
עדכון או הוספה של נתונים עם הצטברות
תג הצפיפות מגביל תוצאות דומות על ידי שיפור המגוון של התוצאות.
הצפיפות היא מגבלה על רשימת שכנים שנוצרת על ידי חיפוש השכן הקרוב ביותר, שדורשת שלא יותר מערך מסוים של קבוצת תוצאות יחזיר את אותו ערך של crowding_attribute. לדוגמה, נניח שחזרתם לקניות אונליין של נעליים. אתם רוצים לראות מגוון רחב של צבעים בתוצאות, אבל אולי אתם רוצים שהם יהיו בסגנון אחד, כמו נעלי כדורגל. אפשר לבקש שלא יוחזרו יותר מ-3 זוגות נעליים באותו צבע על ידי הגדרת per_crowding_attribute_num_neighbors = 3 בשאילתה, בהנחה שהגדרתם את מאפיין הצפיפות (crowding_attribute) לצבע הנעליים כשמכניסים את נקודה על הגרף.
השדה הזה מייצג את המספר המקסימלי המותר של התאמות עם אותו תג ריווח.
curl -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`" https://${ENDPOINT}/v1/projects/${PROJECT_ID}/locations/us-central1/indexes/${INDEX_ID}:upsertDatapoints \
-d '{
datapoints: [
{
datapoint_id: "'${DATAPOINT_ID_1}'",
feature_vector: [...],
restricts: { namespace: "type", allow_list: ["cleats"]}
crowding_tag: { crowding_attribute: "red-shoe"},
}
]}'