Wenn Sie eine Suchanwendung haben, die strukturierte Daten oder unstrukturierte Daten mit Metadaten verwendet, können Sie die Metadaten zum Filtern Ihrer Suchanfragen verwenden. Auf dieser Seite wird erläutert, wie Sie Metadatenfelder verwenden, um Ihre Suche auf eine bestimmte Gruppe von Dokumenten zu beschränken.
Hinweise
Sie müssen eine Anwendung erstellt und strukturierte Daten oder unstrukturierte Daten mit Metadaten aufgenommen haben. Weitere Informationen finden Sie unter Such-App erstellen.
Beispiel für Metadaten
Sehen Sie sich dieses Beispiel für Metadaten für vier PDF-Dateien (document_1.pdf
, document_2.pdf
, document_3.pdf
und document_4.pdf
) an. Diese Metadaten befinden sich zusammen mit den PDF-Dateien in einer JSON-Datei in einem Cloud Storage-Bucket. Sie können sich dieses Beispiel ansehen, während Sie diese Seite lesen.
{"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"}}
Filterausdruckssyntax
Sie sollten die Syntax des Filterausdrucks kennen, mit dem Sie den Suchfilter definieren. Die Filterausdruckssyntax kann mit der folgenden erweiterten Backus-Naur-Form zusammengefasst werden:
# 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.
Mit einem Metadatenfilter suchen
So suchen Sie mit einem Metadatenfilter:
Legen Sie das Metadatenfeld fest, das zum Filtern Ihrer Suchanfragen verwendet werden soll. Für die Metadaten unter Vorbereitung können Sie beispielsweise das Feld
category
als Suchfilter verwenden. Ihre Nutzer können nachpersona_A
,persona_B
oderpersona_C
filtern, sodass ihre Suche auf die Dokumente beschränkt wird, die mit der Persona verknüpft sind, die sie interessiert.Metadatenfeld indexierbar machen:
Rufen Sie in der Google Cloud Console die Seite KI-Anwendungen auf und klicken Sie im Navigationsmenü auf Apps.
Klicken Sie auf Ihre Such-App.
Klicken Sie im Navigationsmenü auf Daten.
Klicken Sie auf den Tab Schema. Auf diesem Tab werden die aktuellen Feldeinstellungen angezeigt.
Klicken Sie auf Bearbeiten.
Klicken Sie das Kästchen Indexierbar für das Feld an, das Sie indexierbar machen möchten.
Klicken Sie auf Speichern. Weitere Informationen finden Sie unter Feldeinstellungen konfigurieren.
Suchen Sie nach Ihrer Datenspeicher-ID. Wenn Sie die ID Ihres Datenspeichers bereits haben, fahren Sie mit dem nächsten Schritt fort.
Rufen Sie in der Google Cloud Console die Seite KI-Anwendungen auf und klicken Sie im Navigationsmenü auf Datenspeicher.
Klicken Sie auf den Namen des Datenspeichers.
Rufen Sie auf der Datenseite Ihres Datenspeichers die Datenspeicher-ID ab.
Suchergebnisse abrufen
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" }'
Ersetzen Sie Folgendes:
PROJECT_ID
: die Projekt-ID.DATA_STORE_ID
: die ID Ihres Datenspeichers.QUERY
: Der Abfragetext für die Suche.FILTER
: Optional. Ein Textfeld, in dem Sie mithilfe der Syntax für Filterausdrücke nach einer bestimmten Gruppe von Feldern filtern können. Der Standardwert ist ein leerer String, d. h. es wird kein Filter angewendet.
Angenommen, Sie haben die vier PDF-Dateien mit Metadaten aus Vorbereitung importiert. Sie möchten nach Dokumenten suchen, die das Wort „claims“ (Ansprüche) enthalten, und nur Dokumente mit dem
category
-Wertpersona_A
abfragen. Dazu müssen Sie die folgenden Anweisungen in Ihren Aufruf einfügen:"query": "claims", "filter": "category: ANY(\"persona_A\")"
Weitere Informationen finden Sie auf dem Tab „REST“ unter Suchergebnisse für eine App mit strukturierten oder unstrukturierten Daten abrufen.
Klicken Sie hier, um eine Beispielantwort zu sehen.
Wenn Sie eine Suche wie im vorherigen Verfahren durchführen, erhalten Sie eine Antwort ähnlich der folgenden. Die Antwort enthält die drei Dokumente mit dem
category
-Wertpersona_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": {} }
Beispiele für Filterausdrücke
Die folgende Tabelle enthält Beispiele für Filterausdrücke.
Filter | Gibt nur Ergebnisse für Dokumente zurück, bei denen: |
---|---|
category: ANY("persona_A") |
Das Textfeld category ist persona_A . |
score: IN(*, 100.0e) |
Das numerische Feld score ist größer als minus unendlich und kleiner als 100,0. |
non-smoking = "true" |
Der boolesche Wert non-smoking ist „true“. |
pet-friendly = "false" |
Der boolesche Wert pet-friendly ist „false“. |
manufactured_date = "2023" |
manufactured date ist ein beliebiger Zeitpunkt im Jahr 2023. |
manufactured_date >= "2024-04-16" |
Der Wert für manufactured_date liegt am oder nach dem 16. April 2024. |
manufactured_date < "2024-04-16T12:00:00-07:00" |
manufactured_date vor 12:00 Uhr Pacific Daylight Time am 16. April 2024 |
office.location:GEO_DISTANCE("1600 Amphitheater Pkwy, Mountain View, CA, 94043", 500) |
Das Feld „Geolokalisierung“ office.location befindet sich in einem Umkreis von 500 m um 1600 Amphitheater Pkwy. |
NOT office.location:GEO_DISTANCE("Palo Alto, CA", 1000) |
Das Feld „Geolokalisierung“ office.location liegt nicht innerhalb eines Radius von 1 km um Palo Alto, Kalifornien. |
office.location:GEO_DISTANCE(34.1829, -121.293, 500) |
das Feld „Geolokalisierung“ office.location befindet sich innerhalb eines Radius von 500 m vom Breitengrad 34,1829 und Längengrad -121,293 |
category: ANY("persona_A") AND score: IN(*, 100.0e) |
category ist persona_A und score ist kleiner als 100 |
office.location:GEO_DISTANCE("Mountain View, CA", 500) OR office.location:GEO_DISTANCE("Palo Alto, CA", 500) |
office.location liegt maximal 500 m von Mountain View oder Palo Alto entfernt. |
(price<175 AND pet-friendly = "true") OR (price<125 AND pet-friendly = "false") |
price ist weniger als 175 und ich kann mein Haustier mitbringen oder price ist weniger als 125 und ich kann mein Haustier nicht mitbringen |
Nächste Schritte
- Um die Auswirkungen von Filtern auf die Suchqualität zu verstehen, müssen Sie die Suchqualität bewerten. Weitere Informationen finden Sie unter Suchqualität bewerten.