Prima di iniziare
Per importare documenti di esempio in Document AI Warehouse, consulta la guida rapida.
Definisci i dati per la ricerca
Quando definisci gli schemi dei documenti e crei i documenti, è importante considerare quali proprietà vuoi definire e come verranno utilizzate con la ricerca, se verranno utilizzate.
Contrassegna una proprietà come filtrabile se vuoi utilizzarla per includere o escludere una parte dei documenti per una ricerca. Ad esempio, potresti rendere filtrabile una proprietà che rappresenta un "Fornitore" perché gli utenti vogliono cercare le fatture di un fornitore specifico.
Se vuoi creare un istogramma (vedi l'esempio più avanti in questo argomento) per una proprietà, questa deve essere filtrabile.
Contrassegna una proprietà come ricercabile se contiene dati che gli utenti vorranno interrogare durante una ricerca di parole chiave.
Ricerca a testo intero
La ricerca a testo intero è il processo di recupero di tutti i documenti che corrispondono alle parole chiave di ricerca nel testo ricercabile. L'utente fornisce un elenco di parole chiave (parole separate da uno spazio vuoto), presumibilmente digitate in un campo di ricerca nell'interfaccia utente. In Document AI Warehouse, le parole chiave vengono elaborate e convertite in una query appropriata. Questa elaborazione elimina le stopword ("il", "in" e "un") e riduce le parole rimanenti al tema. Lo stemming riduce la parola a una versione comune della formulazione, in modo che la variazione della parola corrisponda. Ad esempio: "lavoro", "lavorando", "lavorato".
Quali dati vengono inclusi nella ricerca?
plain_textdel documento.- Se importi un oggetto Document AI, utilizza
cloud_ai_document.textincorporato. - Il nome visualizzato del documento.
- Tutte le proprietà disponibili per la ricerca.
La query supporta parzialmente la sintassi di stile Google AIP. Nello specifico, la query supporta valori letterali, operatori logici, operatori di negazione, operatori di confronto e funzioni.
- Valori letterali: un valore letterale semplice (ad esempio "42", "Hugo") è un valore da confrontare. Esegue la ricerca nell'intero testo del documento e nelle proprietà ricercabili.
- Operatori logici: "AND", "and", "OR" e "or" sono operatori logici binari (esempio: "engineer OR developer").
- Operatori di negazione: "NOT" e "!" sono operatori di negazione (ad esempio: "NOT software").
Operatori di confronto: supportano gli operatori di confronto binario
=,!=,<,>,<=e>=per stringhe, valori numerici, enumerazioni e valori booleani. Supporta anche l'operatore~~per le stringhe. Fornisce la funzionalità di ricerca semantica analizzando, estraendo i temi e ampliando i sinonimi in base alla query di input.Per specificare una proprietà nella query, l'espressione a sinistra nel confronto deve essere l'ID proprietà, incluso il genitore. Il lato destro deve contenere valori letterali. Ad esempio:
\"projects/123/locations/us\".property_a < 1corrisponde ai risultati il cuiproperty_aè inferiore a 1 nel progetto123e nella localitàus. I valori letterali e l'espressione di confronto possono essere collegati in una singola query (ad esempio,software engineer \"projects/123/locations/us\".salary > 100).Funzioni: le funzioni supportate sono
LOWER([property_name])per eseguire una corrispondenza senza distinzione tra maiuscole e minuscole eEMPTY([property_name])per filtrare in base all'esistenza di una chiave.Supporta le espressioni nidificate collegate tramite parentesi e operatori logici. Gli operatori logici predefiniti sono
ANDse non sono presenti operatori tra le espressioni.
La query può essere utilizzata con altri filtri, ad esempio time_filters e folder_name_filter. Sono collegati all'operatore AND.
Le query di ricerca possono essere filtrate in base a parametri aggiuntivi, ad esempio property, time, schema, folder e creator.
Chiamata a una richiesta di ricerca
Per chiamare il servizio di ricerca, devi utilizzare una richiesta di ricerca, definita come segue:
{
"requestMetadata": {
object (RequestMetadata)
},
"documentQuery": {
object (DocumentQuery)
},
"offset": integer,
"pageSize": integer,
"pageToken": string,
"orderBy": string,
"histogramQueries": [
{
object (HistogramQuery)
}
],
"requireTotalSize": boolean,
"totalResultSize": enum (TotalResultSize),
"qaSizeLimit": integer
}
Il campo parent deve essere compilato nel formato:
/projects/PROJECT_ID/locations/LOCATION
Risposta a una richiesta di ricerca
La risposta di ricerca è definita come segue:
{
"matchingDocuments": [
{
object (MatchingDocument)
}
],
"nextPageToken": string,
"totalSize": integer,
"metadata": {
object (ResponseMetadata)
},
"histogramQueryResults": [
{
object (HistogramQueryResult)
}
]
}
Query sui documenti
Il campo document_query è definito come segue:
{
"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)
}
}
Il campo query contiene le parole della query di ricerca dell'utente richiedente. In genere, provengono dal campo di ricerca nell'interfaccia utente.
Filtri
Document AI Warehouse offre una serie di filtri.
Filtro temporale per i documenti
Il filtro per l'ora di creazione e aggiornamento funziona esattamente come ti aspetteresti: trova i documenti che corrispondono alle parole chiave entro un periodo di tempo specificato.
Un oggetto TimeFilter viene utilizzato per specificare l'intervallo di tempo ed è definito come segue:
{
"timeRange": {
object (Interval)
},
"timeField": enum (TimeField)
}
Il campo time_field consente di specificare se l'intervallo di tempo specificato in time_range si riferisce all'ora di creazione del documento o all'ora dell'ultimo aggiornamento.
Il campo time_range specifica l'intervallo di tempo come Interval. Un Interval è definito come:
{
"startTime": string,
"endTime": string
}
Filtro per creator
Per cercare documenti creati da uno o più utenti specifici, utilizza il filtro Autore. Ad esempio:
{
document_query {
query: "videogames director",
documentCreatorFilter: [
"diane@some_company.com",
"frank@some_company.com",
],
},
}
Filtro proprietà
Il filtro delle proprietà ti consente di specificare i filtri per qualsiasi proprietà specificata in uno schema, a condizione che sia stata configurata in modo da essere filtrabile.
Ad esempio, l'utilizzo di filtri delle proprietà nel settore legale potrebbe filtrare una proprietà denominata COURT per cercare solo i documenti di un determinato tribunale.
I filtri delle proprietà utilizzano un oggetto PropertyFilter. Puoi avere più di un filtro proprietà. Quando utilizzi più filtri delle proprietà, questi vengono combinati utilizzando l'operatore OR.
Un filtro delle proprietà è definito come segue:
{
"documentSchemaName": string,
"condition": string
}
Le proprietà sono definite negli schemi. Pertanto, il campo documentSchemaName è quello in cui specifichi lo schema della proprietà che utilizzi per il filtro. Nel campo condition, specifica la logica che preferisci. Per esempi di utilizzo dei campi documentSchemaName e condition, consulta gli esempi precedenti in questa pagina.
Documento corrispondente
Un documento corrispondente contiene un elemento Document e uno snippet (di cui parleremo più avanti). Il documento restituito in MatchingDocument non è compilato completamente. Contiene i dati minimi per visualizzare un elenco di risultati di ricerca per l'utente richiedente. Se è necessario il documento completo (ad esempio, se l'utente ha fatto clic su un risultato di ricerca), il documento completo deve essere recuperato tramite l'API GetDocument.
I seguenti campi Document sono compilati: Project number, Document id, Document schema id, Create time, Update time, Display name, Raw document file type, Reference id e Filterable properties.
Un documento corrispondente sarà simile a questo:
{
"document": {
object (Document)
},
"searchTextSnippet": string,
"qaResult": {
object (QAResult)
}
}
Ranking/ordinamento
La richiesta di ricerca ti consente di specificare come vuoi che vengano ordinati i risultati. Per ordinare, utilizza il campo order_by nella richiesta di ricerca. I valori possibili per questo campo includono:
relevance desc: pertinenza decrescente, ovvero le corrispondenze migliori sono in alto.upload_date desc: la data di creazione del documento in ordine decrescente (il più recente in alto).upload_date: la data di creazione del documento in ordine crescente (il più vecchio in alto).update_date desc: la data dell'ultimo aggiornamento del documento in ordine decrescente (il più recente in alto).Update_date: la data dell'ultimo aggiornamento del documento in ordine crescente (il più vecchio in alto).
Se non specifichi un ordinamento, ma fornisci parole chiave di ricerca, l'ordinamento viene eseguito in base alla pertinenza in ordine decrescente (le corrispondenze migliori in alto). Se non vengono forniti né l'ordinamento né le parole chiave, l'ordinamento predefinito è in base all'ora di aggiornamento in ordine decrescente (i documenti più recenti in alto).
Impaginazione
La paginazione è utile per mostrare all'utente finale una pagina di dati. Qui puoi specificare le dimensioni della pagina e ottenere un conteggio totale delle dimensioni dei risultati da mostrare all'utente (ad esempio "Visualizzazione di 50 documenti su 300").
Imposta il campo page_size sul numero di risultati che vuoi ricevere con la richiesta di ricerca. Ciò potrebbe corrispondere ai requisiti delle dimensioni di visualizzazione dei risultati di ricerca della UI.
Esistono due meccanismi: offset e token di pagina.
Un offset è l'indice nell'elenco dei documenti restituibili che vuoi restituire. Ad esempio, un offset di 5 significa che vuoi il sesto documento in poi. Presumibilmente, incrementeresti l'offset in base alla dimensione della pagina per la pagina successiva dei risultati.
In alternativa, puoi utilizzare un token di pagina e non preoccuparti di calcolare l'offset successivo. Dopo aver effettuato la prima richiesta di ricerca, ricevi una risposta di ricerca che contiene il campo next_page_token. Se questo campo è vuoto, non ci sono altri risultati. Se il campo non è vuoto, utilizza questo token nella richiesta di ricerca successiva impostando il campo page_token.
Alcune UI mostrano il conteggio dei documenti trovati dalla ricerca. Ad esempio, you are viewing 10 documents of 120. Per ottenere un conteggio dei documenti restituiti, imposta il campo require_total_size boolean della richiesta su True.
Suggerimento: require_total_size=True comporta una penalità di rendimento. Imposta questo valore nella query della prima pagina, quindi impostalo su false in tutte le richieste successive, mantenendo il conteggio totale in una variabile locale.
Esempi di codice
Python
Per saperne di più, consulta la documentazione di riferimento dell'API Document AI Warehouse Python.
Per eseguire l'autenticazione in Document AI Warehouse, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.
Java
Per saperne di più, consulta la documentazione di riferimento dell'API Document AI Warehouse Java.
Per eseguire l'autenticazione in Document AI Warehouse, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.
Passaggi successivi
- Vai alla ricerca avanzata per scoprire come utilizzare le funzionalità di ricerca avanzata.
- Visita il riferimento REST