Filtrar búsquedas de contenido multimedia

Si tienes una aplicación de búsqueda de contenido multimedia, puedes usar metadatos para filtrar tus consultas de búsqueda. En esta página se explica cómo usar los campos de metadatos para limitar la búsqueda a un conjunto específico de documentos.

Antes de empezar

Asegúrate de haber creado una aplicación multimedia y un almacén de datos, y de haber insertado datos. Para obtener más información, consulta Crear un almacén de datos multimedia y Crear una aplicación multimedia.

Documentos de ejemplo

Consulta estos documentos multimedia de ejemplo. Puedes consultarlas mientras lees esta página.

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

Sintaxis de las expresiones de filtro

Asegúrate de que entiendes la sintaxis de la expresión de filtro que vas a usar para definir el filtro de búsqueda. La sintaxis de la expresión de filtro se puede resumir con la siguiente notación de Backus-Naur ampliada:

  # 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.

Para filtrar la búsqueda de contenido multimedia por metadatos, sigue estos pasos:

  1. Busca el ID de tu almacén de datos. Si ya tiene el ID del almacén de datos, vaya al siguiente paso.

    1. En la Google Cloud consola, ve a la página Aplicaciones de IA y, en el menú de navegación, haz clic en Almacenes de datos.

      Ir a la página Almacenes de datos

    2. Haga clic en el nombre de su almacén de datos.

    3. En la página Datos de su almacén de datos, obtenga el ID del almacén de datos.

  2. Determina los campos del documento por los que quieres filtrar. Por ejemplo, en el caso de los documentos de Antes de empezar, puedes usar el campo categories como filtro.

    Solo puede usar campos indexables en expresiones de filtro. Para determinar si un campo se puede indexar, haz lo siguiente:

    1. En la Google Cloud consola, ve a la página Aplicaciones de IA y, en el menú de navegación, haz clic en Almacenes de datos.

      Ve a la página Almacenes de datos.

    2. Haga clic en el nombre de su almacén de datos.

    3. En la columna Nombre, haga clic en el almacén de datos.

    4. Haga clic en la pestaña Esquema para ver el esquema de su almacén de datos. Si Indexable del campo es:

      • Seleccionado , el campo estará listo para filtrar la búsqueda. Salta al paso 3.

      • No seleccionado . A continuación, sigue el paso 3 para habilitar el campo para la indexación.

      • No está disponible , entonces el campo no se puede indexar.

  3. Para que un campo, como el campo categories, se pueda filtrar, haz lo siguiente:

    1. En la Google Cloud consola, ve a la página Aplicaciones de IA y, en el menú de navegación, haz clic en Aplicaciones.

      Ir a la página Aplicaciones

    2. Haz clic en tu aplicación de búsqueda de contenido multimedia.

    3. En el menú de navegación, haga clic en Datos.

    4. Haz clic en la pestaña Esquema. En esta pestaña se muestra la configuración actual de los campos.

    5. Haz clic en Editar.

    6. Si aún no está seleccionada, marque la casilla Indexable de la fila Categorías y, a continuación, haga clic en Guardar.

    7. Espera seis horas para que se apliquen los cambios en el esquema. Después de seis horas, puedes continuar con el siguiente paso.

  4. Obtener resultados de búsqueda.

    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"
    }'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto.
    • DATA_STORE_ID: el ID de tu almacén de datos.
    • QUERY: el texto de la consulta que se va a buscar.
    • FILTER: un campo de texto para filtrar la búsqueda mediante una expresión de filtro.

    Por ejemplo, supongamos que quieres buscar películas en la sección Antes de empezar y solo quieres ver los resultados de las películas que: 1) contengan la palabra "avatar" y 2) estén en la categoría "Documental". Para ello, debes incluir las siguientes declaraciones en tu llamada:

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

    Para obtener más información, consulta el método search.

    Haz clic para ver un ejemplo de respuesta.

    Si realizas una búsqueda como la del procedimiento anterior, puedes esperar obtener una respuesta similar a la siguiente. Ten en cuenta que la respuesta solo incluye los documentales de Avatar.

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

Filtrar documentos disponibles

Si quieres que los resultados de búsqueda solo incluyan documentos disponibles, debes incluir un filtro para ello en tus consultas. Los documentos disponibles son aquellos en los que la available_time es anterior a la fecha actual y la expire_time no se ha especificado o se ha fijado para una fecha futura.

Filtra para devolver solo los documentos que estén disponibles:

  available_time <= \"DATE_TIME\" AND expire_time > \"DATE_TIME\"

Sustituye DATE_TIME por la fecha de hoy (por ejemplo, 2025-04-21 o 2025-04-21T00:00:00Z).

Filtros de valoraciones, personas y organizaciones

La sintaxis de los filtros de clasificaciones de contenido multimedia, personas y organizaciones es única y no sigue los patrones anteriores. Usa los siguientes ejemplos y fragmentos de filtro copiables para crear filtros de valoraciones, personas y organizaciones.

El filtro varía en función de si usas el esquema predefinido de Google o tu propio esquema personalizado.

Filtros de valoraciones, personas y organizaciones (esquema predefinido de Google)

La sintaxis y los ejemplos de los filtros de valoración, persona y organización son los siguientes:

  • Filtrar por valoraciones: filtra las valoraciones de una fuente determinada.

     rating(RATING_SOURCE, aggregate_ratings.rating_score) OPERATOR RATING_SCORE
    

    Haz los cambios siguientes:

    • RATING_SOURCE: la fuente de la valoración. En el caso de un esquema predefinido, se trata de un valor del campo aggregate_ratings.rating_source.

    • OPERATOR: uno de los operadores de comparación, <=, <, >=, > o =

    • RATING_SCORE: un valor de calificación en el intervalo [1,5]. En el caso de un esquema predefinido, se trata de un valor del campo aggregate_ratings.rating_score.

    Por ejemplo, este filtro restringe la búsqueda a películas con una valoración de IMDB superior a 2,5 estrellas. El valor entre paréntesis se resuelve en el valor de la clasificación de IMDb:

    "filter": "rating(imdb, aggregate_ratings.rating_score) > 2.5"
    
  • Filtrar personas: filtra por el nombre de las personas que tienen un rol determinado.

    person(PERSONS_ROLE, persons.name): ANY NAME_STRING
    

    Haz los cambios siguientes:

    • PERSONS_ROLE: en el caso de un esquema predefinido, se trata de un valor del campo persons.role (director, actor, player, team, league, editor, author, character, contributor, creator, editor, funder, producer, provider, publisher, sponsor, translator, music-by, channel o custom-role).

    • NAME_STRING: uno o varios nombres de personas con el rol especificado. En el caso de los comandos curl, como en el paso 4, las comillas dobles deben incluirse con el carácter de barra inversa.

    Ejemplo: Este filtro restringe la búsqueda a las películas en las que uno de los actores es Brad Pitt o Kate Winslet.

    filter: "person(actor, persons.name): ANY(\"Brad Pitt\", \"Kate Winslet\")"
    
  • Filtrar organizaciones: filtra por el nombre de una organización para un rol determinado.

    org(ORG_ROLE, organization.name): ANY NAME_STRING
    

    Haz los cambios siguientes:

    • ORG_ROLE: en el caso de un esquema predefinido, se trata de un valor del campo organizations.role (director, actor, player, team, league, editor, author, character, contributor, creator, editor, funder, producer, provider, publisher, sponsor, translator, music-by, channel o custom-role).

    • NAME_STRING: uno o varios nombres de organizaciones con el rol especificado. En los comandos curl, como en el paso 4, las comillas dobles deben incluirse con el carácter de barra invertida.

    En este ejemplo, la búsqueda se limita a las películas cuya productora sea Walt Disney Studios:

    filter: "org(producer, organizations.name): ANY(\"Walt Disney Studios\")"
    

Filtros de valoraciones, personas y organizaciones (esquema personalizado)

Si usas un esquema personalizado, consulta la sección Esquema predefinido de Google y, a continuación, los ejemplos de esta sección. Para que los filtros de valoración, persona y organización funcionen en un esquema personalizado, las asignaciones de propiedades deben configurarse correctamente. Para obtener información sobre las asignaciones de propiedades, consulta Esquema personalizado.

Filtro Propiedades que se deben asignar
puntuación media_aggregated_rating
media_aggregated_rating_score
media_aggregated_rating_source
persona media_person
media_person_name
media_person_role
org media_organization
media_organization_name
media_organization_role

Ejemplo de filtro de valoraciones para un esquema personalizado

Este filtro busca películas que tengan una valoración de 5 estrellas en Rotten Tomatoes:

"filter": "rating(rotten_tomatoes, custom_rating.star_score) = 5"

El rotten_tomatoes es un valor del campo asignado a media_aggregated_rating_source. custom_rating.star_score es el campo asignado a la propiedad de clave media_aggregated_rating.media_aggregated_rating_score.

Ejemplo de filtro de organización para un esquema personalizado

Este filtro busca películas en las que la música fue compuesta por la Orquesta Sinfónica de Londres o la Orquesta Sinfónica de Hollywood Studio.

"filter: org(music-by, company.id): ANY (\"London Symphony Orchestra\", \"Hollywood Studio Symphony\" )

company.id es el nombre del campo asignado a la propiedad media_organization_name. Además, music-by es un valor del campo de registro de la empresa que se asigna a media_organization_role.