כששיחת שאילתה מסתיימת בצורה תקינה, היא מחזירה את התוצאה כאובייקט SearchResults. אובייקט התוצאות מציין כמה מסמכים תואמים נמצאו באינדקס וכמה מסמכים תואמים הוחזרו. היא כוללת גם רשימה של ScoredDocuments שתואמים.
הרשימה בדרך כלל מכילה חלק מכל המסמכים התואמים שנמצאו, כי החיפוש מחזיר מספר מוגבל של מסמכים בכל פעם שהוא מופעל. באמצעות היסט או סמן אפשר לאחזר את כל המסמכים התואמים, קבוצת משנה בכל פעם.
תוצאות
בהתאם לערך של limit
query option, מספר המסמכים התואמים שמוחזרים בתוצאה עשוי להיות קטן ממספר המסמכים שנמצאו. חשוב לזכור שהמספר שיימצא יהיה הערכה אם רמת הדיוק של המספר שיימצא תהיה נמוכה מהמספר שיימצא. לא משנה איך תגדירו את אפשרויות החיפוש, קריאה ל-search() לא תחזיר יותר מ-10,000 מסמכים שתואמים לחיפוש.
אם נמצאו יותר מסמכים מאלה שהוחזרו, ואתם רוצים לאחזר את כולם, אתם צריכים לחזור על החיפוש באמצעות היסט או סמן, כמו שמוסבר בהמשך.
מסמכים עם ניקוד
תוצאות החיפוש יכללו רשימה של [ScoredDocuments]/appengine/docs/standard/services/search/python/scoreddocumentclass) שתואמים לשאילתה. אפשר לבצע איטרציה על הרשימה כדי לעבד כל מסמך בתורו:
כברירת מחדל, מסמך עם ניקוד מכיל את כל השדות של המסמך המקורי שעבר אינדוקס. אם אפשרויות השאילתה שצוינו הן
returned_fields
, רק השדות האלה מופיעים במאפיין fields של המסמך. אם יצרתם שדות מחושבים על ידי ציון
returned_expressions
או
snippeted_fields
, הם יופיעו בנפרד במאפיין expressions של המסמך.
שימוש בהזחות
אם החיפוש מוצא יותר מסמכים מכמות המסמכים שאפשר להחזיר בבת אחת, אפשר להשתמש בהיסט כדי ליצור אינדקס ברשימת המסמכים התואמים. לדוגמה, מגבלת ברירת המחדל של שאילתות היא 20 מסמכים. אחרי שמבצעים חיפוש בפעם הראשונה (עם היסט של 0) ומאחזרים את 20 המסמכים הראשונים, מאחזרים את 20 המסמכים הבאים על ידי הגדרת ההיסט ל-20 והרצת אותו החיפוש שוב. ממשיכים לחזור על החיפוש, ומגדילים בכל פעם את ההיסט במספר המסמכים שמוחזרים:
שימוש בהיסטים יכול להיות לא יעיל כשמבצעים איטרציה על קבוצת תוצאות גדולה מאוד.
שימוש בסמנים
אפשר גם להשתמש בסמנים כדי לאחזר טווח משנה של תוצאות. סמני מיקום שימושיים כשרוצים להציג את תוצאות החיפוש בדפים עוקבים, ורוצים לוודא שלא מדלגים על אף מסמך במקרה שבו האינדקס עשוי להשתנות בין שאילתות. סמנים גם יעילים יותר כשמבצעים איטרציה על קבוצת תוצאות גדולה מאוד.
כדי להשתמש בסמנים, צריך ליצור סמן ראשוני ולכלול אותו באפשרויות השאילתה. יש שני סוגים של סמני מיקום: לכל שאילתה ולכל תוצאה. סמן לכל שאילתה גורם לכך שסמן נפרד ישויך לאובייקט התוצאות שמוחזר על ידי קריאת החיפוש. סמן לכל תוצאה גורם לשיוך סמן לכל מסמך שקיבל ציון בתוצאות.
שימוש בסמן לכל שאילתה
כברירת מחדל, סמן חדש שנוצר הוא סמן לכל שאילתה. הסמן הזה מציין את המיקום של המסמך האחרון שהוחזר בתוצאות החיפוש. הוא מתעדכן בכל חיפוש. כדי למנות את כל המסמכים התואמים באינדקס, מבצעים את אותו חיפוש עד שהתוצאה מחזירה סמן null:
שימוש בסמן לכל תוצאה
כדי ליצור סמנים לכל תוצאה, צריך להגדיר את מאפיין הסמן per_result לערך true כשיוצרים את הסמן הראשוני. כשתוצאות החיפוש יחזרו, לכל מסמך יהיה סמן שמשויך אליו. אפשר להשתמש בסמן הזה כדי לציין חיפוש חדש עם תוצאות שמתחילות במסמך ספציפי. שימו לב: כשמעבירים סמן לכל תוצאה לחיפוש, לא יהיה סמן לכל שאילתה שמשויך לתוצאה עצמה. הפונקציה result.getCursor() תחזיר ערך null, כך שאי אפשר להשתמש בה כדי לבדוק אם אחזרתם את כל ההתאמות.
שמירה ושחזור של סמנים
אפשר לבצע סריאליזציה של סמן כמחרוזת בטוחה לשימוש באינטרנט, לשמור אותו ואז לשחזר אותו לשימוש מאוחר יותר: