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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

פעולות בתור (SDK של המחבר)

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

כדי לארוז ולדחוף פריט לתור, משתמשים במחלקת ה-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 יש תמיכה בציון ערכי גיבוב (hash) של מטא-נתונים וערכי גיבוב (hash) של תוכן בבקשות Items.index. במקום לציין את הערך type, אפשר לציין את ערכי הגיבוב של המטא-נתונים או של התוכן באמצעות בקשת דחיפה. תור ההוספה לאינדקס של Cloud Search משווה בין ערכי הגיבוב (hash) שסופקו לערכים השמורים עם הפריט שבמקור הנתונים. אם הערך לא תואם, הרשומה תסומן כ-MODIFIED. אם פריט תואם לא קיים באינדקס, הסטטוס הוא NEW_ITEM.

Items.poll

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

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

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