Si vous disposez d'une application de recherche de contenus multimédias, vous pouvez utiliser des métadonnées pour filtrer vos requêtes de recherche. Cette page explique comment utiliser les champs de métadonnées pour limiter votre recherche à un ensemble de documents spécifique.
Avant de commencer
Assurez-vous d'avoir créé une application multimédia et un datastore, et d'avoir ingéré des données. Pour en savoir plus, consultez Créer un entrepôt de données multimédias et Créer une application multimédia.
Exemples de documents
Consultez ces exemples de documents multimédias. Vous pourrez vous y référer au fur et à mesure que vous lirez cette page.
{"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\"}"}
Syntaxe des expressions de filtre
Assurez-vous de comprendre la syntaxe des expressions de filtre que vous utiliserez pour définir votre filtre de recherche. La syntaxe de l'expression de filtre peut être résumée par la forme Backus-Naur étendue suivante:
# 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.
Filtrer la recherche multimédia
Pour filtrer la recherche multimédia à l'aide de métadonnées, procédez comme suit:
Recherchez l'ID de votre data store. Si vous disposez déjà de l'ID de votre data store, passez à l'étape suivante.
Dans la console Google Cloud, accédez à la page Applications d'IA et cliquez sur Data Stores (Dépôts de données) dans le menu de navigation.
Cliquez sur le nom de votre data store.
Sur la page Données de votre data store, obtenez l'ID du data store.
Déterminez le ou les champs de document sur lesquels vous souhaitez appliquer des filtres. Par exemple, pour les documents de la section Avant de commencer, vous pouvez utiliser le champ
categories
comme filtre.Vous ne pouvez utiliser que des champs indexables dans les expressions de filtre. Pour déterminer si un champ est indexable, procédez comme suit:
Dans la console Google Cloud, accédez à la page Applications d'IA et cliquez sur Data Stores (Dépôts de données) dans le menu de navigation.
Cliquez sur le nom de votre data store.
Dans la colonne Nom, cliquez sur le data store.
Cliquez sur l'onglet Schéma pour afficher le schéma de votre data store. Si Indexable (Indexable) est défini sur:
Si vous avez sélectionné
, ce champ est prêt à être filtré pour la recherche. Passez à l'étape 3.Non sélectionné
, puis suivez l'étape 3 pour activer l'indexation du champ.non disponible, le champ ne peut pas être indexé.
Pour rendre un champ filtrable, comme le champ
categories
, procédez comme suit:Dans la console Google Cloud, accédez à la page Applications d'IA, puis dans le menu de navigation, cliquez sur Apps (Applications).
Cliquez sur votre application de recherche multimédia.
Dans le menu de navigation, cliquez sur Données.
Cliquez sur l'onglet Schéma. Cet onglet affiche les paramètres actuels des champs.
Cliquez sur Modifier.
Si ce n'est pas déjà fait, cochez la case Indexable (Indexable) dans la ligne categories (Catégories), puis cliquez sur Save (Enregistrer).
Attendez six heures pour que la modification de votre schéma soit prise en compte. Au bout de six heures, vous pouvez passer à l'étape suivante.
Obtenir les résultats de recherche
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" }'
Remplacez les éléments suivants :
PROJECT_ID
: par l'ID du projet.DATA_STORE_ID
: ID de votre datastore.QUERY
: texte de la requête à rechercher.FILTER
: champ de texte permettant de filtrer votre recherche à l'aide d'une expression de filtre.
Par exemple, supposons que vous souhaitiez rechercher des films dans la section Avant de commencer et que vous ne vouliez obtenir des résultats de recherche que pour les films qui: (1) contiennent le mot "avatar" et (2) appartiennent à la catégorie "Documentaire". Pour ce faire, incluez les instructions suivantes avec votre appel:
"query": "avatar", "filter": "categories: ANY(\"Documentary\")"
Pour en savoir plus, consultez la section sur la méthode
search
.Cliquez pour voir un exemple de réponse.
Si vous effectuez une recherche comme celle de la procédure précédente, vous devriez obtenir une réponse semblable à la suivante. Notez que la réponse n'inclut que les documentaires sur 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": {} }
Filtres pour les avis, les personnes et les organisations
La syntaxe de filtrage pour les classifications des contenus multimédias, les personnes et les organisations est unique et ne suit pas les modèles ci-dessus. Utilisez les exemples suivants et les extraits de code de filtres copiables pour créer des filtres pour les notes, les personnes et les organisations.
Le filtre diffère selon que vous utilisez le schéma prédéfini de Google ou votre propre schéma personnalisé.
Filtres pour les avis, les personnes et les organisations (schéma prédéfini de Google)
Voici la syntaxe et les exemples des filtres "Avis", "Personne" et "Organisation" :
Filtrer par note:filtrez les données en fonction des notes d'une source donnée.
rating(RATING_SOURCE, aggregate_ratings.rating_score) OPERATOR RATING_SCORE
Remplacez les éléments suivants :
RATING_SOURCE
: source de la note. Pour un schéma prédéfini, il s'agit d'une valeur dans le champaggregate_ratings.rating_source
.OPERATOR
: l'un des opérateurs de comparaison,<=
,<
,>=
,>
ou=
RATING_SCORE
: valeur d'évaluation comprise dans la plage [1,5]. Pour un schéma prédéfini, il s'agit d'une valeur dans le champaggregate_ratings.rating_score
.
Exemple: Ce filtre limite la recherche aux films dont la note IMDB est supérieure à 2,5 étoiles. La valeur entre parenthèses est remplacée par la valeur de la note IMDB:
"filter": "filter: "rating(imdb, aggregate_ratings.rating_score) > 2.5"
Filtrer les personnes:filtrez les noms des personnes pour un rôle donné.
person(PERSONS_ROLE, persons.name): ANY NAME_STRING
Remplacez les éléments suivants :
PERSONS_ROLE
: pour un schéma prédéfini, il s'agit d'une valeur dans le champpersons.role
(director
,actor
,player
,team
,league
,editor
,author
,character
,contributor
,creator
,editor
,funder
,producer
,provider
,publisher
,sponsor
,translator
,music-by
,channel
oucustom-role
).NAME_STRING
: un ou plusieurs noms de personnes ayant le rôle spécifié. Pour les commandes curl, comme à l'étape 4, les guillemets doubles doivent être échappés avec le caractère barre oblique inverse.
Exemple: Ce filtre limite la recherche aux films dans lesquels l'un des acteurs est Brad Pitt ou Kate Winslet.
filter: "person(actor, persons.name): ANY(\"Brad Pitt\", \"Kate Winslet\")"
Filtrer les organisations:filtrez sur le nom d'une organisation pour un rôle donné.
org(ORG_ROLE, organization.name): ANY NAME_STRING
Remplacez les éléments suivants :
ORG_ROLE
: pour un schéma prédéfini, il s'agit d'une valeur dans le champorganizations.role
(director
,actor
,player
,team
,league
,editor
,author
,character
,contributor
,creator
,editor
,funder
,producer
,provider
,publisher
,sponsor
,translator
,music-by
,channel
oucustom-role
).NAME_STRING
: un ou plusieurs noms d'organisations avec le rôle spécifié. Pour les commandes curl, comme à l'étape 4, les guillemets doubles doivent être échappés avec le caractère barre oblique inverse.
Cet exemple limite la recherche aux films dont l'organisation de production est Walt Disney Studios:
filter: "org(producer, organizations.name): ANY(\"Walt Disney Studios\")"
Filtres pour les notes, les personnes et les organisations (schéma personnalisé)
Si vous utilisez un schéma personnalisé, consultez la section Schéma prédéfini Google, puis les exemples de cette section. Pour que les filtres de classification, de personne et d'organisation fonctionnent dans un schéma personnalisé, les mappages de propriétés doivent être correctement définis. Pour en savoir plus sur les mappages de propriétés, consultez la section Schéma personnalisé.
Filtre | Propriétés à cartographier |
---|---|
Note | media_aggregated_rating media_aggregated_rating_score media_aggregated_rating_source |
Personne | media_person media_person_name media_person_role |
org | media_organization media_organization_name media_organization_role |
Exemple de filtre de classification pour un schéma personnalisé
Ce filtre recherche les films ayant reçu une note de 5 étoiles sur Rotten Tomatoes:
"filter": "rating(rotten_tomatoes, custom_rating.star_score) = 5"
rotten_tomatoes
est une valeur du champ mappée sur media_aggregated_rating_source
. custom_rating.star_score
est le champ mappé sur la propriété de clé media_aggregated_rating.media_aggregated_rating_score
.
Exemple de filtre d'organisation pour un schéma personnalisé
Ce filtre recherche les films dont la musique a été composée par l'Orchestre symphonique de Londres ou l'Hollywood Studio Symphony.
"filter: org(music-by, company.id): ANY (\"London Symphony Orchestra\", \"Hollywood Studio Symphony\" )
company.id
correspond au nom du champ mappé à la propriété media_organization_name
. music-by
est une valeur du champ d'enregistrement de l'entreprise qui correspond à media_organization_role
.