Cómo filtrar la búsqueda de contenido multimedia

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

Antes de comenzar

Asegúrate de haber creado una app de música y un almacén de datos, y de haber transferido datos. Para obtener más información, consulta Cómo crear un almacén de datos multimedia y Cómo crear una app multimedia.

Documentos de ejemplo

Revisa estos ejemplos de documentos multimedia. Puedes consultarlos 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 la expresión de filtro

Asegúrate de comprender la sintaxis de la expresión de filtro que usarás para definir tu filtro de búsqueda. Se puede resumir la sintaxis de la expresión de filtro con la siguiente forma de Backus-Naur extendida:

  # 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 con metadatos, sigue estos pasos:

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

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

      Ve a la página Almacenes de datos.

    2. Haz clic en el nombre de tu almacén de datos.

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

  2. Determina el campo o los campos del documento que deseas filtrar. Por ejemplo, para los documentos de Antes de comenzar, puedes usar el campo categories como filtro.

    Solo puedes usar campos indexables en expresiones de filtro. Para determinar si un campo es indexable, haz lo siguiente:

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

      Ir a la página de almacenes de datos

    2. Haz clic en el nombre de tu almacén de datos.

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

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

      • Seleccionaste , por lo que ese campo está listo para filtrar la búsqueda. Omite el paso 3.

      • Si no seleccionaste , sigue el paso 3 para habilitar el campo para la indexación.

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

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

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

      Ve a la página Apps.

    2. Haz clic en tu app de búsqueda de contenido multimedia.

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

    4. Haz clic en la pestaña Esquema. En esta pestaña, se muestra la configuración actual del campo.

    5. Haz clic en Edit.

    6. Si aún no está seleccionada, selecciona la casilla de verificación Indexable en la fila categories y, luego, haz clic en Save.

    7. Espera seis horas para que se propague la edición del esquema. Después de seis horas, puedes continuar con el siguiente paso.

  4. Obtén resultados de la 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"
    }'
    
    • PROJECT_ID: Es el ID del proyecto
    • DATA_STORE_ID: Es el ID de tu almacén de datos.
    • QUERY: Es el texto de la búsqueda.
    • FILTER: Es un campo de texto para filtrar tu búsqueda con una expresión de filtro.

    Por ejemplo, supongamos que quieres buscar entre las películas de la sección Antes de comenzar y quieres que los resultados de la búsqueda solo incluyan películas que (1) contengan la palabra “avatar” y (2) estén en la categoría “Documental”. Para ello, incluye las siguientes instrucciones con 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, es posible que obtengas 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": {}
    }