Mediensuche filtern

Wenn Sie eine App für die Mediensuche verwenden, können Sie Ihre Suchanfragen mithilfe von Metadaten filtern. Auf dieser Seite wird erläutert, wie Sie mithilfe von Metadatenfeldern Ihre Suche auf eine bestimmte Gruppe von Dokumenten eingrenzen.

Hinweise

Sie müssen eine Medien-App und einen Datenspeicher erstellt und Daten aufgenommen haben. Weitere Informationen finden Sie unter Mediendatenspeicher erstellen und Medien-App erstellen.

Beispieldokumente

Sehen Sie sich diese Beispielmediendokumente an. Sie können sie sich beim Lesen dieser Seite noch einmal ansehen.

{"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

Sie müssen die Syntax für Filterausdrücke kennen, mit der 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 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.

So filtern Sie die Mediensuche mithilfe von Metadaten:

  1. Ermitteln Sie Ihre Datenspeicher-ID. Wenn Sie die Datenspeicher-ID bereits haben, fahren Sie mit dem nächsten Schritt fort.

    1. Rufen Sie in der Google Cloud Console die Seite KI-Anwendungen auf und klicken Sie im Navigationsmenü auf Datenspeicher.

      Zur Seite „Datenspeicher“

    2. Klicken Sie auf den Namen des Datenspeichers.

    3. Rufen Sie auf der Datenseite Ihres Datenspeichers die Datenspeicher-ID ab.

  2. Legen Sie das Dokumentfeld oder die Dokumentfelder fest, nach denen Sie filtern möchten. Für die Dokumente unter Vorab können Sie beispielsweise das Feld categories als Filter verwenden.

    In Filterausdrücken können nur indexierbare Felder verwendet werden. So prüfen Sie, ob ein Feld indexierbar ist:

    1. Rufen Sie in der Google Cloud Console die Seite KI-Anwendungen auf und klicken Sie im Navigationsmenü auf Datenspeicher.

      Zur Seite „Datenspeicher“

    2. Klicken Sie auf den Namen des Datenspeichers.

    3. Klicken Sie in der Spalte Name auf den Datenspeicher.

    4. Klicken Sie auf den Tab Schema, um das Schema für Ihren Datenspeicher aufzurufen. Wenn Indexierbar für das Feld Folgendes ist:

      • Wenn Sie ausgewählt haben, kann das Feld für die Suche gefiltert werden. Überspringen Sie Schritt 3.

      • Nicht ausgewählt : Folgen Sie dann Schritt 3, um das Feld für die Indexierung zu aktivieren.

      • Wenn nicht verfügbar ist, kann das Feld nicht indexiert werden.

  3. So machen Sie ein Feld wie das Feld categories filterbar:

    1. Rufen Sie in der Google Cloud Console die Seite KI-Anwendungen auf und klicken Sie im Navigationsmenü auf Apps.

      Zur Seite „Apps“

    2. Klicken Sie auf die Mediensuch-App.

    3. Klicken Sie im Navigationsmenü auf Daten.

    4. Klicken Sie auf den Tab Schema. Auf diesem Tab werden die aktuellen Feldeinstellungen angezeigt.

    5. Klicken Sie auf Bearbeiten.

    6. Klicken Sie in der Zeile Kategorien das Kästchen Indexierbar an und klicken Sie dann auf Speichern.

    7. Warten Sie sechs Stunden, damit die Schemaänderung übernommen werden kann. Nach sechs Stunden können Sie mit dem nächsten Schritt fortfahren.

  4. 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 Suchtext.
    • FILTER: Textfeld zum Filtern der Suche mit einem Filterausdruck.

    Angenommen, Sie möchten die Filme im Abschnitt Vorab durchsuchen und nur Suchergebnisse für Filme erhalten, die (1) das Wort „Avatar“ enthalten und (2) der Kategorie „Dokumentarfilm“ zugewiesen sind. Dazu fügen Sie die folgenden Anweisungen in Ihren Aufruf ein:

    "query": "avatar",
    "filter": "categories: ANY(\"Documentary\")"
    

    Weitere Informationen finden Sie im Artikel zur search-Methode.

    Klicken Sie für eine Beispielantwort.

    Wenn Sie eine Suche wie die im vorherigen Verfahren beschriebene ausführen, erhalten Sie eine Antwort, die in etwa so aussieht: 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 in den Suchergebnissen nur verfügbare Dokumente zurückgegeben werden sollen, müssen Sie Ihre Abfragen entsprechend filtern. Verfügbare Dokumente sind solche, bei denen das available_time in der Vergangenheit liegt und das expire_time nicht angegeben oder auf ein Datum in der Zukunft gesetzt ist.

Filtern Sie, um nur Dokumente zurückzugeben, die derzeit verfügbar sind:

  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. Mit den folgenden Beispielen und Filter-Snippets, die du kopieren kannst, kannst du Filter für Altersfreigaben, Personen und Organisationen erstellen.

Der Filter unterscheidet sich je nachdem, ob Sie das vordefinierte Schema von Google oder Ihr eigenes benutzerdefiniertes Schema verwenden.

Filter für Bewertungen, Personen und Organisationen (vordefiniertes Google-Schema)

Syntax und Beispiele für die Filter „Bewertung“, „Person“ und „Organisation“:

  • Nach Bewertungen filtern:Sie können nach Bewertungen aus einer bestimmten Quelle filtern.

     rating(RATING_SOURCE, aggregate_ratings.rating_score) OPERATOR RATING_SCORE
    

    Ersetzen Sie Folgendes:

    • RATING_SOURCE: die Quelle der Altersfreigabe. Bei einem vordefinierten Schema ist dies ein Wert im Feld aggregate_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 Feld aggregate_ratings.rating_score.

    Beispiel: Mit diesem Filter wird die Suche auf Filme mit einer IMDB-Bewertung von mehr als 2,5 Sternen beschränkt. Der Wert in den Klammern wird in den Wert der IMDB-Altersfreigabe umgewandelt:

    "filter": "rating(imdb, aggregate_ratings.rating_score) > 2.5"
    
  • Personen filtern:Sie können nach den Namen von Personen für eine bestimmte Rolle filtern.

    person(PERSONS_ROLE, persons.name): ANY NAME_STRING
    

    Ersetzen Sie Folgendes:

    • PERSONS_ROLE: Bei einem vordefinierten Schema ist dies ein Wert im Feld persons.role (director, actor, player, team, league, editor, author, character, contributor, creator, editor, funder, producer, provider, publisher, sponsor, translator, music-by, channel oder custom-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: Mit diesem Filter wird die Suche auf Filme beschränkt, in denen einer der Schauspieler Brad Pitt oder Kate Winslet ist.

    filter: "person(actor, persons.name): ANY(\"Brad Pitt\", \"Kate Winslet\")"
    
  • Nach Organisationen filtern:Sie können nach dem Namen einer Organisation für eine bestimmte Rolle filtern.

    org(ORG_ROLE, organization.name): ANY NAME_STRING
    

    Ersetzen Sie Folgendes:

    • ORG_ROLE: Bei einem vordefinierten Schema ist dies ein Wert im Feld organizations.role (director, actor, player, team, league, editor, author, character, contributor, creator, editor, funder, producer, provider, publisher, sponsor, translator, music-by, channel oder custom-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, bei denen die Produktionsfirma 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 Vordefiniertes Google-Schema und dann die Beispiele in diesem Abschnitt. Damit die Filter für Altersfreigabe, Personen und Organisationen in einem benutzerdefinierten Schema funktionieren, müssen die Property-Zuordnungen richtig festgelegt sein. Informationen zu Property-Zuordnungen finden Sie unter Benutzerdefiniertes Schema.

Filter Zu kartierende Unterkünfte
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 werden Filme 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. custom_rating.star_score ist das Feld, das der Schlüsseleigenschaft media_aggregated_rating.media_aggregated_rating_score zugeordnet ist.

Beispiel für einen Organisationsfilter für ein benutzerdefiniertes Schema

Mit diesem Filter werden Filme gefiltert, deren 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 Unternehmenseintrags, der media_organization_role zugeordnet ist.