אינדקסים של חיפושים ב-JSON

בנוסף לאינדוקס של טקסט, אינדקס החיפוש ב-Spanner מספק דרך יעילה לאינדוקס ולשאילתות של מסמכי JSON ו-JSONB. אפשר להשתמש באינדקסים של חיפוש בשאילתות JSON ו-JSONB עצמאיות, או כדי לשפר שאילתות אחרות של חיפוש טקסט מלא.

מידע נוסף זמין במאמרים בנושא אינדקס של נתוני JSON ואינדקס של נתוני JSONB.

יצירת טוקניזציה של JSON ו-JSONB

אפשר להשתמש בפונקציה TOKENIZE_JSON כדי ליצור אינדקס JSON ב-GoogleSQL, או בפונקציה TOKENIZE_JSONB כדי ליצור אינדקס JSONB ב-PostgreSQL. פרטים נוספים זמינים במאמרים TOKENIZE_JSON וTOKENIZE_JSONB.

שאילתות JSON ו-JSONB

אפשר להשתמש באינדקס חיפוש כדי להריץ מהר יותר שאילתות שכוללות תנאים של הכלה ב-JSON וקיום מפתח. הכללת JSON קובעת אם מסמך JSON אחד נכלל בתוך מסמך אחר. הקיום של מפתח קובע אם מפתח קיים בסכימת מסד הנתונים.

  • ב-GoogleSQL:

    • כדי להביע הכללה של JSON בסכימה, משתמשים בפונקציה JSON_CONTAINS.
    • יוצרים תנאים לקיום מפתח באמצעות האופרטורים של גישה לשדה, אינדקס למערך IS NOT NULL. אופרטורים של גישה לשדה ושל אינדקס במערך מתארים נתיב של מסמך JSON. ‫IS NOT NULL בודק אם הנתיב הזה קיים (לדוגמה, doc.sub.path[@index].key IS NOT NULL).
  • ב-PostgreSQL:

    • אפשר להשתמש באופרטורים @> ו-<@ כדי לבטא הכלה של JSONB. מידע נוסף זמין במאמר בנושא אופרטורים של JSONB.
    • אפשר ליצור תנאים לקיום מפתח באמצעות האופרטורים ?, ?| ו-?&. למידע נוסף, אפשר לעיין במאמר בנושא אופרטורים של JSONB.

בשאלות שלכם, אתם יכולים לכלול כמה תנאי JSON מכל סוג במדד החיפוש. אפשר גם לכלול את תנאי ה-JSON בשילוב לוגי באמצעות AND, OR ו-NOT.

בדיקת השימוש באינדקס החיפוש

כדי לבדוק שהשאילתה משתמשת באינדקס חיפוש, מחפשים צומת Search index scan בתוכנית הביצוע של השאילתה.

הגבלות

  • אינדקסים של חיפוש, כולל אינדקסים של חיפוש בפורמט JSON ו-JSONB, משמשים רק בעסקאות לקריאה בלבד. יכול להיות ש-Spanner ישתמש באינדקסים משניים רלוונטיים בעסקת קריאה-כתיבה. אם תנסו לכפות שימוש באינדקס חיפוש בעסקה של קריאה וכתיבה, תופיע השגיאה הבאה: ERROR: spanner: code = "InvalidArgument", desc = "The search index AlbumsIndex cannot be used in transactional queries by default."
  • ניסיונות לאחסן מסמכי JSON גדולים או מורכבים מאוד באינדקס חיפוש עשויים להחזיר שגיאה too many search token bytes. גודל טוקן הפלט ממסמך ה-JSON הזה צריך להיות קטן מ-10MB. אם אתם לא צריכים שהמסמך כולו יהיה ניתן לחיפוש, כדאי לחלץ קבוצת משנה קטנה יותר של המסמך (לדוגמה, באמצעות עמודה שנוצרה) ולחפש בעמודה במקום זאת.

המאמרים הבאים