Avant de commencer
Pour ingérer des exemples de documents dans Document AI Warehouse, consultez le guide de démarrage rapide.
Définir vos données pour la recherche
Lorsque vous définissez vos schémas de document et créez vos documents, il est important de réfléchir aux propriétés que vous souhaitez définir et à la manière dont elles seront utilisées avec la recherche, le cas échéant.
Marquez une propriété comme filtrable si vous souhaitez l'utiliser pour inclure ou exclure une partie des documents pour une recherche. Par exemple, vous pouvez rendre une propriété représentant un "fournisseur" filtrable, car vos utilisateurs souhaitent rechercher des factures d'un fournisseur spécifique.
Si vous souhaitez créer un histogramme (voir l'exemple plus loin dans cette rubrique) sur une propriété, celle-ci doit être filtrable.
Marquez une propriété comme pouvant faire l'objet d'une recherche si elle contient des données que vos utilisateurs souhaiteront interroger lors d'une recherche par mot clé.
Recherche en texte intégral
La recherche en texte intégral est le processus de récupération de tous les documents dont le texte pouvant faire l'objet d'une recherche correspond aux mots clés de la recherche. L'utilisateur fournit une liste de mots clés (mots séparés par un espace), probablement saisis dans un champ de recherche de l'interface utilisateur. Dans Document AI Warehouse, les mots clés sont traités et convertis en requête appropriée. Ce traitement supprime les mots vides ("le", "la", "les", "un", "une", "des", etc.) et racinise les mots restants. La racinisation réduit le mot à une version commune de la formulation, de sorte que les variations du mot correspondent. Par exemple : "travail", "travaille", "travaillé".
Sur quelles données porte la recherche ?
plain_textdu document.- Si vous importez un objet Document AI, utilisez
cloud_ai_document.textintégré. - display_name du document.
- Toutes les propriétés pouvant faire l'objet d'une recherche.
La requête est partiellement compatible avec la syntaxe de style Google AIP. Plus précisément, la requête est compatible avec les littéraux, les opérateurs logiques, les opérateurs de négation, les opérateurs de comparaison et les fonctions.
- Littéraux : une valeur littérale brute (exemples : "42", "Hugo") est une valeur à faire correspondre. Elle effectue une recherche dans le texte intégral du document et dans les propriétés pouvant faire l'objet d'une recherche.
- Opérateurs logiques : "AND", "and", "OR" et "or" sont des opérateurs logiques binaires (exemple : "engineer OR developer").
- Opérateurs de négation : "NOT" et "!" sont des opérateurs de négation (exemple : "NOT software").
Opérateurs de comparaison : sont compatibles avec les opérateurs de comparaison binaires
=,!=,<,>,<=et>=pour les chaînes, les valeurs numériques, les énumérations et les valeurs booléennes. Sont également compatibles avec l'opérateur "like"~~pour les chaînes. Il fournit une fonctionnalité de recherche sémantique en analysant, en racinisant et en développant les synonymes par rapport à la requête d'entrée.Pour spécifier une propriété dans la requête, l'expression de gauche dans la comparaison doit être l'ID de propriété, y compris le parent. Le côté droit doit être des littéraux. Par exemple :
\"projects/123/locations/us\".property_a < 1correspond aux résultats dontproperty_aest inférieur à 1 dans le projet123et l'emplacementus. Les littéraux et l'expression de comparaison peuvent être connectés dans une seule requête (exemple :software engineer \"projects/123/locations/us\".salary > 100).Fonctions : les fonctions compatibles sont
LOWER([property_name]), qui permet d'effectuer une correspondance sans distinction de casse, etEMPTY([property_name]), qui permet de filtrer en fonction de l'existence d'une clé.Accepte les expressions imbriquées connectées à l'aide de parenthèses et d'opérateurs logiques. L'opérateur logique par défaut est
ANDs'il n'y a pas d'opérateur entre les expressions.
La requête peut être utilisée avec d'autres filtres, par exemple time_filters et folder_name_filter. Ils sont connectés à l'opérateur AND en arrière-plan.
Les requêtes de recherche peuvent être filtrées par des paramètres supplémentaires tels que property, time, schema, folder et creator.
Appel à une requête de recherche
Pour appeler le service de recherche, vous devez utiliser une requête de recherche, qui est définie comme suit :
{
"requestMetadata": {
object (RequestMetadata)
},
"documentQuery": {
object (DocumentQuery)
},
"offset": integer,
"pageSize": integer,
"pageToken": string,
"orderBy": string,
"histogramQueries": [
{
object (HistogramQuery)
}
],
"requireTotalSize": boolean,
"totalResultSize": enum (TotalResultSize),
"qaSizeLimit": integer
}
Le champ parent doit être rempli au format suivant :
/projects/PROJECT_ID/locations/LOCATION
Réponse à une requête de recherche
La réponse de recherche est définie comme suit :
{
"matchingDocuments": [
{
object (MatchingDocument)
}
],
"nextPageToken": string,
"totalSize": integer,
"metadata": {
object (ResponseMetadata)
},
"histogramQueryResults": [
{
object (HistogramQueryResult)
}
]
}
Requête de document
Le champ document_query est défini comme suit :
{
"query": string,
"isNlQuery": boolean,
"customPropertyFilter": string,
"timeFilters": [
{
object (TimeFilter)
}
],
"documentSchemaNames": [
string
],
"propertyFilter": [
{
object (PropertyFilter)
}
],
"fileTypeFilter": {
object (FileTypeFilter)
},
"folderNameFilter": string,
"queryContext": [
string
],
"documentCreatorFilter": [
string
],
"customWeightsMetadata": {
object (CustomWeightsMetadata)
}
}
Le champ query est destiné aux mots de la requête de recherche de l'utilisateur qui en fait la demande. En règle générale, ils proviennent du champ de recherche de l'interface utilisateur.
Filtres
Document AI Warehouse propose différents filtres.
Filtre de temps de document
Le filtre de temps de création et de mise à jour est exactement ce à quoi vous vous attendez : il recherche les documents correspondant aux mots clés dans une période spécifiée.
Un objet TimeFilter est utilisé pour spécifier la période. Il est défini comme suit :
{
"timeRange": {
object (Interval)
},
"timeField": enum (TimeField)
}
Le champ time_field vous permet de spécifier si la période spécifiée dans time_range correspond à l'heure de création du document ou à l'heure de sa dernière mise à jour.
Le champ time_range spécifie la période sous la forme d'un Interval. Un Interval est défini comme suit :
{
"startTime": string,
"endTime": string
}
Filtre de créateur
Pour rechercher des documents créés par un ou plusieurs utilisateurs spécifiques, utilisez le filtre de créateur. Exemple :
{
document_query {
query: "videogames director",
documentCreatorFilter: [
"diane@some_company.com",
"frank@some_company.com",
],
},
}
Filtre de propriété
Le filtre de propriété vous permet de spécifier des filtres sur l'une des propriétés que vous avez spécifiées dans un schéma, à condition que cette propriété ait été configurée pour être filtrable.
Par exemple, l'utilisation de filtres de propriété dans le secteur juridique peut filtrer une propriété appelée COURT pour rechercher uniquement les documents d'un tribunal particulier.
Les filtres de propriété utilisent un objet PropertyFilter. Vous pouvez avoir plusieurs filtres de propriété. Lorsque vous utilisez plusieurs filtres de propriété, ils sont combinés à l'aide de l'opérateur OR.
Un filtre de propriété est défini comme suit :
{
"documentSchemaName": string,
"condition": string
}
Les propriétés sont définies dans des schémas. Ainsi, le champ documentSchemaName vous permet de spécifier le schéma de la propriété que vous utilisez pour le filtrage. Dans le champ condition, vous spécifiez la logique souhaitée. Pour obtenir des exemples d'utilisation des champs documentSchemaName et condition, consultez les exemples précédents sur cette page.
Document correspondant
Un document correspondant contient un Document et un extrait (abordés plus loin). Le document renvoyé dans MatchingDocument n'est pas un document entièrement rempli. Il contient des données minimales pour afficher une liste de résultats de recherche à l'utilisateur qui en fait la demande. Si le document complet est souhaité (par exemple, si l'utilisateur a cliqué sur un résultat de recherche), il doit être récupéré via l'API GetDocument.
Les champs Document suivants sont renseignés : Project number, Document id, Document schema id, Create time, Update time, Display name, Raw document file type, Reference id et Filterable properties.
Un document correspondant se présente comme suit :
{
"document": {
object (Document)
},
"searchTextSnippet": string,
"qaResult": {
object (QAResult)
}
}
Classement/Tri
La requête de recherche vous permet de spécifier le mode de tri des résultats. Pour effectuer un tri, utilisez le champ order_by dans la requête de recherche. Les valeurs possibles pour ce champ sont les suivantes :
relevance desc: pertinence décroissante, c'est-à-dire que les meilleures correspondances sont en haut.upload_date desc: date de création du document dans l'ordre décroissant (le plus récent en haut).upload_date: date de création du document dans l'ordre croissant (le plus ancien en haut).update_date desc: date de la dernière mise à jour du document dans l'ordre décroissant (le plus récent en haut).Update_date: date de la dernière mise à jour du document dans l'ordre croissant (le plus ancien en haut).
Si vous ne spécifiez pas de tri, mais que vous fournissez des mots clés de recherche, le tri est effectué par pertinence décroissante (les meilleures correspondances en haut). Si ni le tri ni les mots clés ne sont fournis, le tri par défaut est effectué par heure de mise à jour décroissante (les documents les plus récents en haut).
Pagination
La pagination est utile pour afficher une page de données à l'utilisateur final. Vous pouvez spécifier la taille de la page et obtenir le nombre total de résultats à afficher à l'utilisateur (par exemple, "Affichage de 50 documents sur 300").
Définissez le champ page_size sur le nombre de résultats souhaité que vous souhaitez recevoir avec la requête de recherche. Cela peut correspondre aux exigences de la taille d'affichage des résultats de recherche de l'interface utilisateur.
Il existe deux mécanismes : le décalage et le jeton de page.
Un décalage est l'index dans la liste des documents renvoyables que vous souhaitez renvoyer. Par exemple, un décalage de 5 signifie que vous souhaitez le sixième document et les suivants. Vous devez probablement incrémenter le décalage de la taille de la page pour la page de résultats suivante.
Vous pouvez également utiliser un jeton de page et ne pas avoir à vous soucier du calcul du décalage suivant. Après avoir effectué votre première requête de recherche, vous recevez une réponse de recherche contenant le champ next_page_token. Si ce champ est vide, il n'y a plus de résultats. Si le champ n'est pas vide, utilisez ce jeton dans votre prochaine requête de recherche en définissant le champ page_token.
Certaines interfaces utilisateur affichent le nombre de documents trouvés par la recherche. Par exemple, you are viewing 10 documents of 120. Pour obtenir le nombre de documents renvoyés, définissez le champ require_total_size boolean de la requête sur True.
Conseil : require_total_size=True a un impact sur les performances. Définissez cette valeur sur la requête de la première page, puis définissez-la sur false pour toutes les requêtes suivantes, en conservant le nombre total dans une variable locale.
Exemples de code
Python
Pour en savoir plus, consultez la documentation de référence de l'API Python Document AI Warehouse.
Pour vous authentifier auprès de Document AI Warehouse, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Java
Pour en savoir plus, consultez la documentation de référence de l'API Document AI Warehouse Java .
Pour vous authentifier auprès de Document AI Warehouse, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Étapes suivantes
- Passez à la recherche avancée pour découvrir comment utiliser les fonctionnalités de recherche avancée.
- Consultez la référence REST.