Wenn Sie eine App für die Mediensuche haben, können Sie Metadaten verwenden, um Ihre Suchanfragen zu filtern. 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 Media-App und einen Datenspeicher erstellt und Daten aufgenommen haben. Weitere Informationen finden Sie unter Mediendatenspeicher erstellen und Media-App erstellen.
Beispieldokumente
Sehen Sie sich diese Beispielmediendokumente an. Sie können sie beim Lesen dieser Seite noch einmal nachschlagen.
{"id":"172851","schemaId":"default_schema","jsonData":"{\"title\":\"Avatar: Creating the World of Pandora (2010)\",\"categories\":[\"Documentary\"],\"uri\":\"http://mytestdomain.movie/content/172851\",\"available_time\":\"2023-01-01T00:00:00Z\",\"media_type\":\"movie\"}"}
{"id":"243308","schemaId":"default_schema","jsonData":"{\"title\":\"Capturing Avatar (2010)\",\"categories\":[\"Documentary\"],\"uri\":\"http://mytestdomain.movie/content/243308\",\"available_time\":\"2023-01-01T00:00:00Z\",\"media_type\":\"movie\"}"}
{"id":"280218","schemaId":"default_schema","jsonData":"{\"title\":\"Avatar: The Way of Water (2022)\",\"categories\":[\"Action\",\"Adventure\",\"Sci-Fi\"],\"uri\":\"http://mytestdomain.movie/content/280218\",\"available_time\":\"2023-01-01T00:00:00Z\",\"media_type\":\"movie\"}"}
{"id":"72998","schemaId":"default_schema","jsonData":"{\"title\":\"Avatar (2009)\",\"categories\":[\"Action\",\"Adventure\",\"Sci-Fi\",\"IMAX\"],\"uri\":\"http://mytestdomain.movie/content/72998\",\"available_time\":\"2023-01-01T00:00:00Z\",\"media_type\":\"movie\"}"}
Filterausdruckssyntax
Machen Sie sich mit der Syntax für Filterausdrücke vertraut, die Sie zum Definieren Ihres Suchfilters verwenden. Die Filterausdruckssyntax kann mit der folgenden Extended 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 contains 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 ); # 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; datetime_field = field of datetime data type - for example available_time; literal_iso_8601_datetime_format = either a double quoted string representing ISO 8601 datetime or a numerical field representing microseconds from unix epoch.
Mediensuche filtern
So filtern Sie die Mediensuche mithilfe von Metadaten:
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.
Legen Sie das Dokumentfeld oder die Dokumentfelder fest, nach denen Sie filtern möchten. Für die Dokumente unter Vorbereitung können Sie beispielsweise das Feld
categories
als Filter verwenden.Sie können nur indexierbare Felder in Filterausdrücken verwenden. So stellen Sie fest, ob ein Feld indexierbar ist:
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.
Klicken Sie in der Spalte Name auf den Datenspeicher.
Klicken Sie auf den Tab Schema, um das Schema für Ihren Datenspeicher aufzurufen. Wenn Indexable für das Feld Folgendes ist:
Wenn Sie
ausgewählt haben, kann das Feld für die Suche gefiltert werden. Überspringen Sie Schritt 3.Wenn das Feld nicht ausgewählt ist
, folgen Sie Schritt 3, um es für die Indexierung zu aktivieren.Nicht verfügbar
: Das Feld kann nicht indexiert werden.
Damit ein Feld wie das Feld
categories
gefiltert werden kann, gehen Sie so vor:Rufen Sie in der Google Cloud Console die Seite KI-Anwendungen auf und klicken Sie im Navigationsmenü auf Apps.
Klicken Sie auf Ihre Mediensuchanwendung.
Klicken Sie im Navigationsmenü auf Daten.
Klicken Sie auf den Tab Schema. Auf diesem Tab werden die aktuellen Feldeinstellungen angezeigt.
Klicken Sie auf Bearbeiten.
Falls noch nicht geschehen, klicken Sie in der Zeile Kategorien das Kästchen Indexierbar an und klicken Sie dann auf Speichern.
Warten Sie sechs Stunden, damit die Schemaänderung übernommen werden kann. Nach sechs Stunden können Sie mit dem nächsten Schritt fortfahren.
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
: Ein Textfeld zum Filtern der Suche mit einem Filterausdruck.
Angenommen, Sie möchten die Filme im Bereich Vorbereitung durchsuchen und nur Suchergebnisse für Filme erhalten, die (1) das Wort „Avatar“ enthalten und (2) der Kategorie „Dokumentarfilm“ angehören. Dazu müssen Sie die folgenden Anweisungen in Ihren Aufruf einfügen:
"query": "avatar", "filter": "categories: ANY(\"Documentary\")"
Weitere Informationen finden Sie im Artikel zur
search
-Methode.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 nur die Avatar-Dokumentationen.
{ "results": [ { "id": "243308", "document": { "name": "projects/431678329718/locations/global/collections/default_collection/dataStores/rdds3_1698205785399/branches/0/documents/243308", "id": "243308", "structData": { "categories": [ "Documentary" ], "title": "Capturing Avatar (2010)", "uri": "http://mytestdomain.movie/content/243308", "media_type": "movie" } } }, { "id": "172851", "document": { "name": "projects/431678329718/locations/global/collections/default_collection/dataStores/rdds3_1698205785399/branches/0/documents/172851", "id": "172851", "structData": { "categories": [ "Documentary" ], "uri": "http://mytestdomain.movie/content/172851", "media_type": "movie", "title": "Avatar: Creating the World of Pandora (2010)" } } } ], "totalSize": 2, "attributionToken": "XfBcCgwIvIzJqwYQ2_qNxwMSJDY1NzEzNmY1LTAwMDAtMmFhMy05YWU3LTE0MjIzYmIwOGVkMiIFTUVESUEqII6-nRXFy_MXnIaOIsLwnhXUsp0VpovvF6OAlyKiho4i", "guidedSearchResult": {}, "summary": {} }
Nach verfügbaren Dokumenten filtern
Wenn Sie möchten, dass in Ihren Suchergebnissen nur verfügbare Dokumente zurückgegeben werden, müssen Sie in Ihre Anfragen einen entsprechenden Filter einfügen. Verfügbare Dokumente sind solche, bei denen available_time
in der Vergangenheit liegt und expire_time
nicht angegeben oder auf ein zukünftiges Datum festgelegt ist.
Filter, um nur derzeit verfügbare Dokumente zurückzugeben:
available_time <= \"DATE_TIME\" AND expire_time > \"DATE_TIME\"
Ersetzen Sie DATE_TIME
durch das heutige Datum, z. B. 2025-04-21
oder 2025-04-21T00:00:00Z
.
Filter für Bewertungen, Personen und Organisationen
Die Filtersyntax für Altersfreigaben, Personen und Organisationen ist eindeutig und folgt nicht den oben genannten Mustern. Anhand der folgenden Beispiele und kopierbaren Filter-Snippets können Sie Filter für Bewertungen, Personen und Organisationen erstellen.
Der Filter unterscheidet sich je nachdem, ob Sie das von Google vordefinierte Schema oder Ihr eigenes benutzerdefiniertes Schema verwenden.
Filter für Bewertungen, Personen und Organisationen (von Google vordefiniertes Schema)
Die Syntax und Beispiele für die Filter „Bewertung“, „Person“ und „Organisation“ sind wie folgt:
Nach Bewertungen filtern:Filtern Sie nach Bewertungen aus einer bestimmten Quelle.
rating(RATING_SOURCE, aggregate_ratings.rating_score) OPERATOR RATING_SCORE
Ersetzen Sie Folgendes:
RATING_SOURCE
: die Quelle für die Bewertung. Bei einem vordefinierten Schema ist dies ein Wert im Feldaggregate_ratings.rating_source
.OPERATOR
: einer der Vergleichsoperatoren<=
,<
,>=
,>
oder=
RATING_SCORE
: ein Bewertungswert im Bereich [1,5]. Bei einem vordefinierten Schema ist dies ein Wert im Feldaggregate_ratings.rating_score
.
Beispiel: Dieser Filter schränkt die Suche auf Filme mit IMDB-Bewertungen von mehr als 2½ Sternen ein. Der Wert in den Klammern wird zum Wert der IMDB-Bewertung aufgelöst:
"filter": "rating(imdb, aggregate_ratings.rating_score) > 2.5"
Personen filtern:Filtern Sie nach den Namen von Personen mit einer bestimmten Rolle.
person(PERSONS_ROLE, persons.name): ANY NAME_STRING
Ersetzen Sie Folgendes:
PERSONS_ROLE
: Bei einem vordefinierten Schema ist dies ein Wert im Feldpersons.role
(director
,actor
,player
,team
,league
,editor
,author
,character
,contributor
,creator
,editor
,funder
,producer
,provider
,publisher
,sponsor
,translator
,music-by
,channel
odercustom-role
).NAME_STRING
: Ein oder mehrere Namen von Personen mit der angegebenen Rolle. Bei curl-Befehlen, wie in Schritt 4, müssen die doppelten Anführungszeichen mit dem umgekehrten Schrägstrich maskiert werden.
Beispiel: Dieser Filter schränkt die Suche auf Filme ein, in denen Brad Pitt oder Kate Winslet mitspielen.
filter: "person(actor, persons.name): ANY(\"Brad Pitt\", \"Kate Winslet\")"
Organisationen filtern:Filtern Sie nach einem Organisationsnamen für eine bestimmte Rolle.
org(ORG_ROLE, organization.name): ANY NAME_STRING
Ersetzen Sie Folgendes:
ORG_ROLE
: Bei einem vordefinierten Schema ist dies ein Wert im Feldorganizations.role
(director
,actor
,player
,team
,league
,editor
,author
,character
,contributor
,creator
,editor
,funder
,producer
,provider
,publisher
,sponsor
,translator
,music-by
,channel
odercustom-role
).NAME_STRING
: Ein oder mehrere Namen von Organisationen mit der angegebenen Rolle. Bei cURL-Befehlen, wie in Schritt 4, müssen die doppelten Anführungszeichen mit dem umgekehrten Schrägstrich maskiert werden.
In diesem Beispiel wird die Suche auf Filme beschränkt, deren Produktionsorganisation Walt Disney Studios ist:
filter: "org(producer, organizations.name): ANY(\"Walt Disney Studios\")"
Filter für Bewertungen, Personen und Organisationen (benutzerdefiniertes Schema)
Wenn Sie ein benutzerdefiniertes Schema verwenden, lesen Sie den Abschnitt Von Google vordefiniertes Schema und dann die Beispiele in diesem Abschnitt. Damit die Filter für Altersfreigabe, Person und Organisation in einem benutzerdefinierten Schema funktionieren, müssen die Attributzuordnungen richtig festgelegt sein. Weitere Informationen zu Attributzuordnungen finden Sie unter Benutzerdefiniertes Schema.
Filter | Zuzuordnende Eigenschaften |
---|---|
rating | media_aggregated_rating media_aggregated_rating_score media_aggregated_rating_source |
Person | media_person media_person_name media_person_role |
org | media_organization media_organization_name media_organization_role |
Beispiel für einen Bewertungsfilter für ein benutzerdefiniertes Schema
Mit diesem Filter wird nach Filmen mit einer 5-Sterne-Bewertung von Rotten Tomatoes gesucht:
"filter": "rating(rotten_tomatoes, custom_rating.star_score) = 5"
rotten_tomatoes
ist ein Wert im Feld, das media_aggregated_rating_source
zugeordnet ist. Das custom_rating.star_score
ist das Feld, das der Schlüsselattribut media_aggregated_rating.media_aggregated_rating_score
zugeordnet ist.
Beispiel für einen Organisationsfilter für ein benutzerdefiniertes Schema
Mit diesem Filter wird nach Filmen gesucht, in denen die Musik vom London Symphony Orchestra oder vom Hollywood Studio Symphony stammt.
"filter: org(music-by, company.id): ANY (\"London Symphony Orchestra\", \"Hollywood Studio Symphony\" )
company.id
ist der Name des Felds, das der Property media_organization_name
zugeordnet ist. music-by
ist ein Wert im Feld des Unternehmensdatensatzes, der media_organization_role
zugeordnet ist.