תורי ההוספה לאינדקס של Google Cloud Search

Connector SDK ו-Google Cloud Search API מאפשרים ליצור תורים לאינדקס של Cloud Search שמשמשים לביצוע המשימות הבאות:

  • לשמור על המצב לכל מסמך (סטטוס, ערכי גיבוב (hash) וכן הלאה) שבו ניתן להשתמש כדי לסנכרן את האינדקס עם המאגר שלכם.

  • לשמור על רשימת פריטים להוספה לאינדקס כפי שהתגלו בתהליך המעבר.

  • ניתן לתת עדיפות לפריטים בתור לפי סטטוס הפריט.

  • לשמור מידע נוסף על המצב כדי לשלב ביעילות, כמו נקודות ביקורת, שינוי אסימון וכו'.

'הבאים בתור' הוא תווית שהוקצתה לפריט שנוסף לאינדקס, כמו 'ברירת מחדל' לתור ברירת המחדל או 'B' לתור B.

סטטוס ועדיפות

העדיפות של מסמך בתור מבוססת על קוד ה-ItemStatus שלו. בהמשך מופיעים הקודים האפשריים של ItemStatus לפי סדר עדיפות (מטופל מהראשון עד האחרון):

  • ERROR – הפריט נתקל בשגיאה אסינכרונית במהלך תהליך ההוספה לאינדקס, ויש להוסיף אותו מחדש לאינדקס.

  • MODIFIED – פריט שנוסף לאינדקס בעבר ושונה מאז במאגר מאז ההוספה האחרונה לאינדקס.

  • NEW_ITEM – פריט שלא נוסף לאינדקס.

  • ACCEPTED – מסמך שנוסף לאינדקס בעבר ולא השתנה במאגר מאז ההוספה האחרונה לאינדקס.

כשיש לשני פריטים בתור את אותו סטטוס, ניתנת עדיפות גבוהה יותר לפריטים שנמצאים בתור למשך הזמן הארוך ביותר.

סקירה כללית של השימוש בתורים להוספה לאינדקס כדי להוסיף לאינדקס פריט חדש או פריט שהשתנה

באיור 1 מוצגים השלבים להוספה לאינדקס של פריט חדש או שהשתנה באמצעות תור להוספה לאינדקס. בשלבים האלה מוצגות קריאות ל-API ל-REST. לקריאות מקבילות ל-SDK, ראו פעולות בתור (Connector SDK).

סקירה כללית של הוספה לאינדקס ב-Google Cloud Search
איור 1. שלבי הוספה לאינדקס להוספה או לעדכון של פריט
  1. מחבר התוכן משתמש ב-items.push כדי לדחוף פריטים (מטא-נתונים וגיבוב) לתור לאינדקס כדי ליצור את סטטוס הפריט (MODIFIED, NEW_ITEM, DELETED).

    • בזמן הדחיפה, המחבר כולל באופן מפורש דחיפה type או contentHash.
    • אם המחבר לא כולל את type, Cloud Search ישתמש אוטומטית ב-contentHash כדי לקבוע את סטטוס הפריט.
    • אם הפריט לא ידוע, סטטוס הפריט מוגדר כ-NEW_ITEM.
    • אם הפריט קיים וערכי הגיבוב תואמים, הסטטוס יישמר כ-ACCEPTED.
    • אם הפריט קיים והגיבובים שונים, הסטטוס יהפוך לMODIFIED.

    למידע נוסף על קביעת סטטוס הפריט, אפשר לעיין בקוד לדוגמה Traversing the GitHub repositories במדריך לתחילת העבודה ב-Cloud Search.

    בדרך כלל, הדחיפה משויכת לתהליכי זיהוי של מעבר תוכן ו/או שינויים במחבר.

  2. מחבר התוכן משתמש ב-items.poll כדי לדגום את התור לקביעת הפריטים להוספה לאינדקס. Cloud Search מציין למחבר אילו פריטים הכי זקוקים להוספה לאינדקס, ממוינים קודם לפי קוד סטטוס ולאחר מכן לפי שעה בתור.

  3. המחבר מאחזר את הפריטים האלה מהמאגר ובונה בקשות API ל-index.

  4. המחבר משתמש ב-items.index כדי להוסיף את הפריטים לאינדקס. הפריט יעבור למצב ACCEPTED רק אחרי שעיבוד הפריט ב-Cloud Search יסתיים בהצלחה.

מחבר יכול גם למחוק פריט אם הוא כבר לא קיים במאגר, או לדחוף פריט שוב אם הוא לא השתנה או אם יש שגיאה במאגר המקור. למידע על מחיקות של פריטים, עיינו בקטע הבא.

סקירה כללית של השימוש בתורי הוספה לאינדקס למחיקת פריט

אסטרטגיית המעבר המלא משתמשת בתהליך של שני תורים כדי להוסיף פריטים לאינדקס ולזהות מחיקות. באיור 2 מוצגים השלבים למחיקת פריט באמצעות שני תורי הוספה לאינדקס. באופן ספציפי, איור 2 מציג את המעבר השני שמבוצע באמצעות אסטרטגיה של מעבר מלא. השלבים האלה משתמשים בקריאות API ל-REST. לקריאות מקבילות ל-SDK, ניתן לעיין במאמר פעולות תור (Connector SDK).

סקירה כללית של הוספה לאינדקס ב-Google Cloud Search
איור 2. מחיקת פריטים
  1. במעבר הראשוני, מחבר התוכן משתמש ב-items.push כדי לדחוף פריטים (מטא-נתונים וגיבוב) לתור ליצירת אינדקס, 'תור A' בתור NEW_ITEM מכיוון שהוא לא קיים בתור. לכל פריט מוקצית התווית 'A' עבור 'תור א'. התוכן נוסף לאינדקס ל-Cloud Search.

  2. מחבר התוכן משתמש ב-items.poll כדי לדגום את תור A כדי לקבוע את הפריטים להוספה לאינדקס. Cloud Search מציין למחבר אילו פריטים הכי זקוקים להוספה לאינדקס, ממוינים קודם לפי קוד סטטוס ולאחר מכן לפי שעה בתור.

  3. המחבר מאחזר את הפריטים האלה מהמאגר ובונה בקשות API ל-index.

  4. המחבר משתמש ב-items.index כדי להוסיף את הפריטים לאינדקס. הפריט יעבור למצב ACCEPTED רק אחרי שעיבוד הפריט ב-Cloud Search יסתיים בהצלחה.

  5. ה-method deleteQueueItems נקראת 'הבאים בתור'. אבל אף פריט לא הועבר לתור ב', כך שאי אפשר למחוק שום דבר.

  6. במעבר המלא השני, מחבר התוכן משתמש ב-items.push כדי לדחוף פריטים (מטא-נתונים וגיבוב) לתור B:

    • בזמן הדחיפה, המחבר כולל באופן מפורש דחיפה type או contentHash.
    • אם המחבר לא כולל את type, Cloud Search ישתמש אוטומטית ב-contentHash כדי לקבוע את סטטוס הפריט.
    • אם הפריט לא ידוע, סטטוס הפריט יהיה NEW_ITEM ותווית התור תשתנה ל-B.
    • אם הפריט קיים וערכי הגיבוב תואמים, הסטטוס יישמר כ-ACCEPTED ותווית התור תשתנה ל-'B'.
    • אם הפריט קיים והגיבובים שונים, הסטטוס יהפוך ל-MODIFIED ותווית התור תשתנה ל-B.
  7. מחבר התוכן משתמש ב-items.poll כדי לדגום את התור לקביעת הפריטים להוספה לאינדקס. Cloud Search מציין למחבר אילו פריטים הכי זקוקים להוספה לאינדקס, ממוינים קודם לפי קוד סטטוס ולאחר מכן לפי שעה בתור.

  8. המחבר מאחזר את הפריטים האלה מהמאגר ובונה בקשות API ל-index.

  9. המחבר משתמש ב-items.index כדי להוסיף את הפריטים לאינדקס. הפריט יעבור למצב ACCEPTED רק אחרי שעיבוד הפריט ב-Cloud Search יסתיים בהצלחה.

  10. לבסוף, הפקודה deleteQueueItems מופעלת בתור A כדי למחוק את כל הפריטים ב-CCloud Search שנוספו לאינדקס בעבר שעדיין יש להם את התווית A בתור.

  11. במעברים המלאים הבאים, התור שמשמש להוספה לאינדקס והתור שמשמש למחיקה מוחלפים.

פעולות בתור (Connector SDK)

ה-SDK של מחבר התוכן מספק פעולות לדחיפה של פריטים לתור ולשליפת פריטים ממנו.

כדי לארוז פריט ולדחוף אותו לתור, משתמשים במחלקת ה-builder pushItems.

לא צריך לבצע פעולה ספציפית כדי לשלוף פריטים מתור לעיבוד. במקום זאת, ה-SDK מושך פריטים באופן אוטומטי מהתור, לפי סדר עדיפות, באמצעות method getDoc של המחלקה Repository.

פעולות בתור (API ל-REST)

ב-API ל-REST יש את שתי השיטות הבאות לדחיפת פריטים לתור ולשליפת פריטים מהתור:

  • כדי להעביר פריט לתור, משתמשים ב-Items.push.
  • כדי לסמן פריטים שנמצאים בתור לבדיקה, משתמשים ב-Items.poll.

אפשר גם להשתמש ב-Items.index כדי לדחוף פריטים לתור במהלך ההוספה לאינדקס. לפריטים שנדחפים לתור במהלך ההוספה לאינדקס לא צריך type, שמוקצה להם באופן אוטומטי הסטטוס ACCEPTED.

Items.push

ה-method Items.push מוסיפה מזהים לתור. אפשר לקרוא לשיטה הזו עם ערך type ספציפי שקובע את התוצאה של פעולת דחיפה. לרשימה של הערכים type, עיינו בשדה item.type ב-method Items.push.

דחיפת מזהה חדש גורמת להוספת רשומה חדשה עם קוד NEW_ITEM ItemStatus.

המטען הייעודי (payload) האופציונלי תמיד מאוחסן כערך אטום ומוחזר מ-Items.poll.

כשפריט נבדק, הוא שמור, כלומר אי אפשר להחזיר אותו באמצעות קריאה אחרת ל-Items.poll. שימוש ב- Items.push עם type כ-NOT_MODIFIED, REPOSITORY_ERROR או REQUEUE, שמורות רשומות בסקר. מידע נוסף על ערכים שמורים ולא שמורים זמין בקטע Items.poll.

Items.push עם גיבובים

ב-Google Cloud Search API יש תמיכה בציון ערכי גיבוב (hash) של מטא-נתונים ותוכן בבקשות Items.index. במקום לציין type, אפשר לציין את ערכי הגיבוב של המטא-נתונים ו/או התוכן באמצעות בקשת דחיפה. בתור ההוספה לאינדקס של Cloud Search, המערכת משווה בין ערכי הגיבוב שסופקו לבין הערכים המאוחסנים שזמינים לפריט במקור הנתונים. אם יש אי התאמה, הרשומה הזו תסומן כ-MODIFIED. אם הפריט המתאים לא קיים באינדקס, הסטטוס הוא NEW_ITEM.

Items.poll

ה-method Items.poll מאחזרת את הרשומות עם העדיפות הגבוהה ביותר מהתור. ערכי הסטטוס המבוקשים והמוחזרים מציינים את הסטטוסים של תורי העדיפות המבוקשים או את הסטטוס של המזהים שהוחזרו.

כברירת מחדל, יכול להיות שיוחזר רשומות מכל קטע בתור, בהתאם לעדיפות. כל רשומה שמוחזרת שמורה ולא מוחזרת באמצעות קריאות אחרות ל-Items.poll עד שמתקיים אחד מהתנאים הבאים:

  • פג הזמן הקצוב של ההזמנה.
  • הרשומה תוכנס שוב לתור על ידי Items.index.
  • Items.push נקראת עם ערך type של NOT_MODIFIED, REPOSITORY_ERROR או REQUEUE.