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

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

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

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

  • לתעדף פריטים בתורים על סמך סטטוס הפריט.

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

תור הוא תווית שמוקצית לפריט שנוסף לאינדקס, למשל 'ברירת מחדל' לתור ברירת המחדל או '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 משתמש באופן אוטומטי בשדה contentHash כדי לקבוע את סטטוס הפריט.
    • אם הפריט לא מזוהה, סטטוס הפריט מוגדר כ-NEW_ITEM.
    • אם הפריט קיים וערכות הגיבוב תואמות, הסטטוס נשאר ACCEPTED.
    • אם הפריט קיים והגיבוב שונה, הסטטוס הופך ל-MODIFIED.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ה-SDK של Content Connector מספק פעולות לדחיפת פריטים לתור ולשליפה של פריטים מהתור.

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

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

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

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

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

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

Items.push

השיטה Items.push מוסיפה מזהים לתור. אפשר להפעיל את השיטה הזו עם ערך ספציפי של type שקובע את התוצאה של פעולת ה-push. רשימה של ערכי 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 עם גיבובים (hash)

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

Items.poll

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

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

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