Si vous disposez d'une application de recherche qui utilise des données structurées ou des données non structurées avec des métadonnées, vous pouvez utiliser ces 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 spécifique de documents.
Avant de commencer
Assurez-vous d'avoir créé une application et ingéré des données structurées ou non structurées avec des métadonnées. Pour en savoir plus, consultez Créer une application de recherche.
Exemple de métadonnées
Consultez cet exemple de métadonnées pour quatre fichiers PDF (document_1.pdf
, document_2.pdf
, document_3.pdf
et document_4.pdf
). Ces métadonnées se trouveraient dans un fichier JSON d'un bucket Cloud Storage, avec les fichiers PDF. Vous pouvez vous référer à cet exemple tout au long de cette page.
{"id": "1", "structData": {"title": "Policy on accepting corrected claims", "category": ["persona_A"]}, "content": {"mimeType": "application/pdf", "uri": "gs://bucketname_87654321/data/document_1.pdf"}}
{"id": "2", "structData": {"title": "Claims documentation and reporting guidelines for commercial members", "category": ["persona_A", "persona_B"]}, "content": {"mimeType": "application/pdf", "uri": "gs://bucketname_87654321/data/document_2.pdf"}}
{"id": "3", "structData": {"title": "Claims guidelines for bundled services and supplies for commercial members", "category": ["persona_B", "persona_C"]}, "content": {"mimeType": "application/pdf", "uri": "gs://bucketname_87654321/data/document_3.pdf"}}
{"id": "4", "structData": {"title": "Advantage claims submission guidelines", "category": ["persona_A", "persona_C"]}, "content": {"mimeType": "application/pdf", "uri": "gs://bucketname_87654321/data/document_4.pdf"}}
Syntaxe des expressions de filtre
Assurez-vous de bien comprendre la syntaxe de l'expression de filtre que vous utiliserez pour définir votre filtre de recherche. La syntaxe de l'expression de filtre peut être résumée au format Extended Backus–Naur form comme suit :
# 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 exactly matches 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 # An expression that applies to a geolocation field with text/street/postal address. | geolocation_field, ":", "GEO_DISTANCE(", literal, ",", distance_in_meters, ")" # An expression that applies to a geolocation field with latitude and longitude. | geolocation_field, ":", "GEO_DISTANCE(", latitude_double, ",", longitude_double, ",", distance_in_meters, ")" # 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; geolocation_field = field of geolocation data type - for example home_address, location; datetime_field = field of datetime data type - for example creation_date, expires_on; literal_iso_8601_datetime_format = either a double quoted string representing ISO 8601 datetime or a numerical field representing microseconds from unix epoch.
Rechercher à l'aide d'un filtre de métadonnées
Pour effectuer une recherche à l'aide d'un filtre de métadonnées, procédez comme suit :
Déterminez le champ de métadonnées à utiliser pour filtrer vos requêtes de recherche.
Par exemple, pour les métadonnées de la section Avant de commencer, vous pouvez utiliser le champ
category
comme filtre de recherche. Lorsque vous filtrez des données structurées, comme dans l'exemple de métadonnées, spécifiez le chemin d'accès complet au champ :structData.category
. Vos utilisateurs peuvent ensuite filtrer les résultats parpersona_A
,persona_B
oupersona_C
pour limiter leur recherche aux documents associés à la persona qui les intéresse.Rendez le champ de métadonnées indexable :
Dans la console Google Cloud , accédez à la page Applications d'IA, puis cliquez sur Applications dans le menu de navigation.
Cliquez sur votre application de recherche.
Dans le menu de navigation, cliquez sur Données.
Cliquez sur l'onglet Schéma. Cet onglet affiche les paramètres de champ actuels.
Cliquez sur Modifier.
Cochez la case Indexable pour le champ que vous souhaitez rendre indexable.
Cliquez sur Enregistrer. Pour en savoir plus, consultez Configurer les paramètres des champs.
Trouvez 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, puis cliquez sur Data stores dans le menu de navigation.
Cliquez sur le nom de votre data store.
Sur la page Données de votre datastore, obtenez l'ID du datastore.
obtenir des 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 data store.QUERY
: texte de la requête à rechercher.FILTER
(facultatif) : Champ de texte qui vous permet de filtrer un ensemble de champs spécifié à l'aide de la syntaxe des expressions de filtre. La valeur par défaut est une chaîne vide, ce qui signifie qu'aucun filtre n'est appliqué.
Par exemple, supposons que vous ayez importé les quatre fichiers PDF avec des métadonnées à partir de la section Avant de commencer. Vous souhaitez rechercher les documents contenant le mot "claims" et n'interroger que les documents dont la valeur
category
estpersona_A
. Pour ce faire, incluez les instructions suivantes dans votre appel :"query": "claims", "filter": "structData.category: ANY(\"persona_A\")"
Pour en savoir plus, consultez l'onglet "REST" dans Obtenir des résultats de recherche pour une application avec des données structurées ou non structurées.
Cliquez pour obtenir un exemple de réponse.
Si vous effectuez une recherche comme celle de la procédure précédente, vous pouvez vous attendre à obtenir une réponse semblable à la suivante. Notez que la réponse inclut les trois documents dont la valeur
category
estpersona_A
.{ "results": [ { "id": "2", "document": { "name": "projects/abcdefg/locations/global/collections/default_collection/dataStores/search_store_id/branches/0/documents/2", "id": "2", "structData": { "title": "Claims documentation and reporting guidelines for commercial members", "category": [ "persona_A", "persona_B" ] }, "derivedStructData": { "link": "gs://bucketname_87654321/data/document_2.pdf", "extractive_answers": [ { "pageNumber": "1", "content": "lorem ipsum" } ] } } }, { "id": "1", "document": { "name": "projects/abcdefg/locations/global/collections/default_collection/dataStores/search_store_id/branches/0/documents/1", "id": "1", "structData": { "title": "Policy on accepting corrected claims", "category": [ "persona_A" ] }, "derivedStructData": { "extractive_answers": [ { "pageNumber": "2", "content": "lorem ipsum" } ], "link": "gs://bucketname_87654321/data/document_1.pdf" } } }, { "id": "4", "document": { "name": "projects/abcdefg/locations/global/collections/default_collection/dataStores/search_store_id/branches/0/documents/4", "id": "4", "structData": { "title": "Advantage claims submission guidelines", "category": [ "persona_A", "persona_C" ] }, "derivedStructData": { "extractive_answers": [ { "pageNumber": "47", "content": "lorem ipsum" } ], "link": "gs://bucketname_87654321/data/document_4.pdf" } } } ], "totalSize": 330, "attributionToken": "UvBRCgsI26PxpQYQs7vQZRIkNjRiYWY1MTItMDAwMC0yZWIwLTg3MTAtMTQyMjNiYzYzMWEyIgdHRU5FUklDKhSOvp0VpovvF8XL8xfC8J4V1LKdFQ", "guidedSearchResult": {}, "summary": {} }
Exemples d'expressions de filtre
Le tableau suivant fournit des exemples d'expressions de filtre.
Filtre | Ne renvoie que les résultats pour les documents où : |
---|---|
category: ANY("persona_A") |
le champ de texte category est persona_A |
score: IN(*, 100.0e) |
le champ numérique score est supérieur à l'infini négatif et inférieur à 100,0. |
non-smoking = "true" |
la valeur booléenne non-smoking est définie sur "true" |
pet-friendly = "false" |
le booléen pet-friendly est défini sur "false" |
manufactured_date = "2023" |
la manufactured date est n'importe quel moment en 2023. |
manufactured_date >= "2024-04-16" |
la date manufactured_date est le 16 avril 2024 ou une date ultérieure ; |
manufactured_date < "2024-04-16T12:00:00-07:00" |
le manufactured_date est avant midi (heure avancée du Pacifique) le 16 avril 2024 ; |
office.location:GEO_DISTANCE("1600 Amphitheater Pkwy, Mountain View, CA, 94043", 500) |
le champ de géolocalisation office.location se trouve à moins de 500 m de 1600 Amphitheater Pkwy. |
NOT office.location:GEO_DISTANCE("Palo Alto, CA", 1000) |
Le champ de géolocalisation office.location ne se trouve pas dans un rayon de 1 km autour de Palo Alto, en Californie. |
office.location:GEO_DISTANCE(34.1829, -121.293, 500) |
le champ de géolocalisation office.location se trouve dans un rayon de 500 mètres autour de la latitude 34.1829 et de la longitude -121.293 |
category: ANY("persona_A") AND score: IN(*, 100.0e) |
category est persona_A et score est inférieur à 100 |
office.location:GEO_DISTANCE("Mountain View, CA", 500) OR office.location:GEO_DISTANCE("Palo Alto, CA", 500) |
office.location se trouve à moins de 500 mètres de Mountain View ou de Palo Alto. |
(price<175 AND pet-friendly = "true") OR (price<125 AND pet-friendly = "false") |
price est inférieur à 175 et je peux emmener mon animal de compagnie, ou price est inférieur à 125 et je ne peux pas emmener mon animal de compagnie |
Étapes suivantes
- Pour comprendre l'impact des filtres sur la qualité de la recherche, évaluez la qualité de la recherche. Pour en savoir plus, consultez Évaluer la qualité de la recherche.