בנוסף לאינדוקס של טקסט, אינדקס החיפוש ב-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).
- כדי להביע הכללה של JSON בסכימה, משתמשים בפונקציה
ב-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. אם אתם לא צריכים שהמסמך כולו יהיה ניתן לחיפוש, כדאי לחלץ קבוצת משנה קטנה יותר של המסמך (לדוגמה, באמצעות עמודה שנוצרה) ולחפש בעמודה במקום זאת.
המאמרים הבאים
- מידע על יצירת טוקנים ומנתחי טוקנים
- מידע נוסף על אינדקסים של חיפושים
- מידע נוסף על הוספת נתוני JSON לאינדקס
- מידע על הוספת נתוני JSONB לאינדקס