אם יש לכם אפליקציית חיפוש שמשתמשת בנתונים מובְנים, או בנתונים לא מובְנים עם מטא-נתונים, אתם יכולים להשתמש במטא-נתונים כדי לסנן את שאילתות החיפוש. בדף הזה מוסבר איך להשתמש בשדות של מטא-נתונים כדי להגביל את החיפוש לקבוצה ספציפית של מסמכים.
לפני שמתחילים
מוודאים שיצרתם אפליקציה והטמעתם נתונים מובְנים או נתונים לא מובְנים עם מטא-נתונים. מידע נוסף זמין במאמר יצירת אפליקציית חיפוש.
דוגמה למטא-נתונים
בדוגמה הבאה מוצגים מטא-נתונים של ארבעה קובצי PDF (document_1.pdf, document_2.pdf, document_3.pdf ו-document_4.pdf). המטא-נתונים האלה יהיו בקובץ JSON בקטגוריה של Cloud Storage, יחד עם קובצי ה-PDF. אתם יכולים לחזור לדוגמה הזו בזמן שאתם קוראים את הדף.
{"id": "1", "structData": {"title": "Policy on accepting corrected claims", "category": ["persona_A"]}, "content": {"mimeType": "application/pdf", "uri": "gs://bucketname_87654321/data/document_1.pdf"}}
{"id": "2", "structData": {"title": "Claims documentation and reporting guidelines for commercial members", "category": ["persona_A", "persona_B"]}, "content": {"mimeType": "application/pdf", "uri": "gs://bucketname_87654321/data/document_2.pdf"}}
{"id": "3", "structData": {"title": "Claims guidelines for bundled services and supplies for commercial members", "category": ["persona_B", "persona_C"]}, "content": {"mimeType": "application/pdf", "uri": "gs://bucketname_87654321/data/document_3.pdf"}}
{"id": "4", "structData": {"title": "Advantage claims submission guidelines", "category": ["persona_A", "persona_C"]}, "content": {"mimeType": "application/pdf", "uri": "gs://bucketname_87654321/data/document_4.pdf"}}
תחביר של ביטוי סינון
חשוב לוודא שאתם מבינים את התחביר של ביטוי הסינון שבו תשתמשו כדי להגדיר את מסנן החיפוש. אפשר לסכם את התחביר של ביטוי המסנן באמצעות Extended Backus–Naur form:
# A single expression or multiple expressions that are joined by "AND" or "OR". filter = expression, { " AND " | "OR", expression }; # Expressions can be prefixed with "-" or "NOT" to express a negation. expression = [ "-" | "NOT " ], # A parenthetical expression. | "(", expression, ")" # A simple expression applying to a text field. # Function "ANY" returns true if the field exactly matches any of the literals. ( text_field, ":", "ANY", "(", literal, { ",", literal }, ")" # A simple expression applying to a numerical field. Function "IN" returns true # if a field value is within the range. By default, lower_bound is inclusive and # upper_bound is exclusive. | numerical_field, ":", "IN", "(", lower_bound, ",", upper_bound, ")" # A simple expression that applies to a numerical field and compares with a double value. | numerical_field, comparison, double # An expression that applies to a geolocation field with text/street/postal address. | geolocation_field, ":", "GEO_DISTANCE(", literal, ",", distance_in_meters, ")" # An expression that applies to a geolocation field with latitude and longitude. | geolocation_field, ":", "GEO_DISTANCE(", latitude_double, ",", longitude_double, ",", distance_in_meters, ")" # Datetime field | datetime_field, comparison, literal_iso_8601_datetime_format); # A lower_bound is either a double or "*", which represents negative infinity. # Explicitly specify inclusive bound with the character 'i' or exclusive bound # with the character 'e'. lower_bound = ( double, [ "e" | "i" ] ) | "*"; # An upper_bound is either a double or "*", which represents infinity. # Explicitly specify inclusive bound with the character 'i' or exclusive bound # with the character 'e'. upper_bound = ( double, [ "e" | "i" ] ) | "*"; # Supported comparison operators. comparison = "<=" | "<" | ">=" | ">" | "="; # A literal is any double quoted string. You must escape backslash (\) and # quote (") characters. literal = double quoted string; text_field = text field - for example, category; numerical_field = numerical field - for example, score; geolocation_field = field of geolocation data type - for example home_address, location; datetime_field = field of datetime data type - for example creation_date, expires_on; literal_iso_8601_datetime_format = either a double quoted string representing ISO 8601 datetime or a numerical field representing microseconds from unix epoch.
חיפוש באמצעות מסנן מטא-נתונים
כדי לחפש באמצעות מסנן מטא-נתונים, פועלים לפי השלבים הבאים:
בוחרים את שדה המטא-נתונים שבו רוצים להשתמש כדי לסנן את שאילתות החיפוש. לדוגמה, במטא-נתונים שבקטע לפני שמתחילים, אפשר להשתמש בשדה
categoryכמסנן חיפוש. המשתמשים יכולים לסנן לפיpersona_A,persona_Bאוpersona_C, כדי שהחיפוש שלהם יוגבל למסמכים שמשויכים לפרסונה שמעניינת אותם.הופכים את שדה המטא-נתונים לניתן להוספה לאינדקס:
במסוף Google Cloud , נכנסים לדף Gemini Enterprise ובתפריט הניווט לוחצים על Apps.
לוחצים על אפליקציית החיפוש.
בתפריט הניווט, לוחצים על נתונים.
לוחצים על הכרטיסייה Schema. בכרטיסייה הזו מוצגות הגדרות השדה הנוכחיות.
לוחצים על Edit.
מסמנים את התיבה Indexable בשדה שרוצים להוסיף לאינדקס.
לוחצים על Save. מידע נוסף זמין במאמר קביעת הגדרות של שדות.
מאתרים את מזהה מאגר הנתונים. אם כבר יש לכם את מזהה מאגר הנתונים, דלגו לשלב הבא.
במסוף Google Cloud , נכנסים לדף Gemini Enterprise ובתפריט הניווט לוחצים על מאגרי נתונים.
לוחצים על השם של מאגר הנתונים.
בדף Data של מאגר הנתונים, מאתרים את המזהה של מאגר הנתונים.
תצוגה מקדימה של תוצאות החיפוש.
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/servingConfigs/default_search:search" \ -d '{ "query": "QUERY", "filter": "FILTER" }'מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט. -
DATA_STORE_ID: המזהה של מאגר הנתונים. -
QUERY: טקסט השאילתה לחיפוש. -
FILTER: אופציונלי. שדה טקסט שמאפשר לסנן קבוצה מסוימת של שדות באמצעות תחביר של ביטוי סינון. ערך ברירת המחדל הוא מחרוזת ריקה, כלומר לא מופעל מסנן.
לדוגמה, נניח שייבאתם את ארבעת קובצי ה-PDF עם המטא-נתונים מהקטע לפני שמתחילים. אתם רוצים לחפש מסמכים שמכילים את המילה "claims", ולשאול רק מסמכים עם ערך
categoryשלpersona_A. כדי לעשות את זה, צריך לכלול את ההצהרות הבאות בקריאה:"query": "claims", "filter": "category: ANY(\"persona_A\")"מידע נוסף זמין בכרטיסייה REST במאמר תצוגה מקדימה של תוצאות חיפוש לאפליקציה עם נתונים מובְנים או לא מובְנים.
כדי לראות דוגמה לתשובה, צריך ללחוץ כאן.
אם תבצעו חיפוש כמו זה שבתהליך הקודם, תקבלו תשובה דומה לזו: שימו לב שהתגובה כוללת את שלושת המסמכים שערך ה-
categoryשלהם הואpersona_A.{ "results": [ { "id": "2", "document": { "name": "projects/abcdefg/locations/global/collections/default_collection/dataStores/search_store_id/branches/0/documents/2", "id": "2", "structData": { "title": "Claims documentation and reporting guidelines for commercial members", "category": [ "persona_A", "persona_B" ] }, "derivedStructData": { "link": "gs://bucketname_87654321/data/document_2.pdf", "extractive_answers": [ { "pageNumber": "1", "content": "lorem ipsum" } ] } } }, { "id": "1", "document": { "name": "projects/abcdefg/locations/global/collections/default_collection/dataStores/search_store_id/branches/0/documents/1", "id": "1", "structData": { "title": "Policy on accepting corrected claims", "category": [ "persona_A" ] }, "derivedStructData": { "extractive_answers": [ { "pageNumber": "2", "content": "lorem ipsum" } ], "link": "gs://bucketname_87654321/data/document_1.pdf" } } }, { "id": "4", "document": { "name": "projects/abcdefg/locations/global/collections/default_collection/dataStores/search_store_id/branches/0/documents/4", "id": "4", "structData": { "title": "Advantage claims submission guidelines", "category": [ "persona_A", "persona_C" ] }, "derivedStructData": { "extractive_answers": [ { "pageNumber": "47", "content": "lorem ipsum" } ], "link": "gs://bucketname_87654321/data/document_4.pdf" } } } ], "totalSize": 330, "attributionToken": "UvBRCgsI26PxpQYQs7vQZRIkNjRiYWY1MTItMDAwMC0yZWIwLTg3MTAtMTQyMjNiYzYzMWEyIgdHRU5FUklDKhSOvp0VpovvF8XL8xfC8J4V1LKdFQ", "guidedSearchResult": {}, "summary": {} }-
דוגמאות לביטויי סינון
בטבלה הבאה מוצגות דוגמאות לביטויי סינון.
| מסנן | התוצאות שמוחזרות הן רק של מסמכים שבהם: |
|---|---|
category: ANY(\"persona_A\") |
שדה הטקסט category הוא persona_A |
score: IN(*, 100.0e) |
השדה המספרי score גדול מאינסוף שלילי וקטן מ-100.0 |
non-smoking = \"true\" |
הערך הבוליאני non-smoking הוא true |
pet-friendly = \"false\" |
הערך הבוליאני pet-friendly הוא false |
manufactured_date = \"2023\" |
הערך בשדה manufactured date הוא תאריך כלשהו בשנת 2023 |
manufactured_date >= \"2024-04-16\" |
ה-manufactured_date הוא ב-16 באפריל 2024 או אחרי התאריך הזה |
manufactured_date < \"2024-04-16T12:00:00-07:00\" |
manufactured_date לפני הצהריים לפי שעון הקיץ של החוף המערבי בארה"ב (PDT) ב-16 באפריל 2024 |
office.location:GEO_DISTANCE(\"1600 Amphitheater Pkwy, Mountain View, CA, 94043\", 500) |
שדה המיקום הגיאוגרפי office.location נמצא במרחק של 500 מ' מ-1600 Amphitheater Pkwy |
NOT office.location:GEO_DISTANCE(\"Palo Alto, CA\", 1000) |
שדה המיקום הגיאוגרפי office.location לא נמצא ברדיוס של קילומטר אחד מפאלו אלטו, קליפורניה. |
office.location:GEO_DISTANCE(34.1829, -121.293, 500) |
שדה המיקום הגיאוגרפי office.location נמצא ברדיוס של 500 מטר מקו הרוחב 34.1829 וקו האורך -121.293 |
category: ANY(\"persona_A\") AND score: IN(*, 100.0e) |
category הוא persona_A ו-score קטן מ-100 |
office.location:GEO_DISTANCE(\"Mountain View, CA\", 500) OR office.location:GEO_DISTANCE(\"Palo Alto, CA\", 500) |
office.location נמצא במרחק של 500 מטרים ממאונטיין ויו או מפאל אלטו. |
(price<175 AND pet-friendly = \"true\") OR (price<125 AND pet-friendly = \"false\") |
price פחות מ-175 ואפשר להביא את חיית המחמד, או price פחות מ-125 ואי אפשר להביא את חיית המחמד |
המאמרים הבאים
- כדי להבין את ההשפעה של המסננים על איכות החיפוש, צריך להעריך את איכות החיפוש. מידע נוסף זמין במאמר הערכת איכות החיפוש.