Se hai un'app di ricerca che utilizza dati strutturati o non strutturati con metadati, puoi utilizzare i metadati per filtrare le query di ricerca. Questa pagina spiega come utilizzare i campi dei metadati per limitare la ricerca a un insieme specifico di documenti.
Prima di iniziare
Assicurati di aver creato un'app e di aver importato dati strutturati o non strutturati con metadati. Per saperne di più, vedi Creare un'app di ricerca.
Esempio di metadati
Esamina questo esempio di metadati per quattro file PDF (document_1.pdf
,
document_2.pdf
, document_3.pdf
e document_4.pdf
). Questi metadati si troverebbero
in un file JSON in un bucket Cloud Storage, insieme ai file PDF. Puoi
fare riferimento a questo esempio mentre leggi questa pagina.
{"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"}}
Sintassi dell'espressione di filtro
Assicurati di comprendere la sintassi dell'espressione di filtro che utilizzerai per definire il filtro di ricerca. La sintassi dell'espressione di filtro può essere riassunta nel seguente Extended Backus–Naur form:
# 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.
Cercare utilizzando un filtro dei metadati
Per eseguire la ricerca utilizzando un filtro dei metadati:
Determina il campo dei metadati da utilizzare per filtrare le query di ricerca.
Ad esempio, per i metadati in Prima di iniziare, puoi utilizzare il campo
category
come filtro di ricerca. Quando filtri i dati strutturati, come nell'esempio dei metadati, specifica il percorso completo del campo:structData.category
. In questo modo, gli utenti possono filtrare in base apersona_A
,persona_B
opersona_C
, in modo che la ricerca sia limitata ai documenti associati alla persona a cui sono interessati.Rendi indicizzabile il campo dei metadati:
Nella console Google Cloud , vai alla pagina AI Applications e nel menu di navigazione, fai clic su App.
Fai clic sull'app di ricerca.
Nel menu di navigazione, fai clic su Dati.
Fai clic sulla scheda Schema. Questa scheda mostra le impostazioni correnti dei campi.
Fai clic su Modifica.
Seleziona la casella di controllo Indicizzabile per il campo che vuoi rendere indicizzabile.
Fai clic su Salva. Per ulteriori informazioni, vedi Configurare le impostazioni dei campi.
Trova l'ID datastore. Se hai già l'ID del tuo datastore, vai al passaggio successivo.
Nella Google Cloud console, vai alla pagina AI Applications e nel menu di navigazione, fai clic su Datastore.
Fai clic sul nome del tuo datastore.
Nella pagina Dati del datastore, recupera l'ID datastore.
Visualizzare i risultati di ricerca.
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" }'
Sostituisci quanto segue:
PROJECT_ID
: l'ID progetto.DATA_STORE_ID
: l'ID del datastore.QUERY
: il testo della query da cercare.FILTER
: facoltativo. Un campo di testo che consente di filtrare un insieme specificato di campi utilizzando la sintassi dell'espressione di filtro. Il valore predefinito è una stringa vuota, il che significa che non viene applicato alcun filtro.
Ad esempio, supponi di aver importato i quattro file PDF con i metadati da Prima di iniziare. Vuoi cercare documenti che contengano la parola "claims" e interrogare solo i documenti con un valore
category
dipersona_A
. Per farlo, includi le seguenti dichiarazioni nella chiamata:"query": "claims", "filter": "structData.category: ANY(\"persona_A\")"
Per maggiori informazioni, consulta la scheda REST all'indirizzo Recuperare i risultati di ricerca per un'app con dati strutturati o non strutturati.
Fai clic per visualizzare una risposta di esempio.
Se esegui una ricerca come quella nella procedura precedente, puoi aspettarti di ricevere una risposta simile alla seguente. Nota che la risposta include i tre documenti con un valore
category
dipersona_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": {} }
Esempi di espressioni di filtro
La seguente tabella fornisce esempi di espressioni di filtro.
Filtro | Restituisce solo i risultati per i documenti in cui: |
---|---|
category: ANY("persona_A") |
il campo di testo category è persona_A |
score: IN(*, 100.0e) |
il campo numerico score è maggiore di infinito negativo e inferiore a 100.0 |
non-smoking = "true" |
il valore booleano non-smoking è true |
pet-friendly = "false" |
il valore booleano pet-friendly è false |
manufactured_date = "2023" |
manufactured date è un momento qualsiasi del 2023 |
manufactured_date >= "2024-04-16" |
il manufactured_date è successivo o uguale al 16 aprile 2024 |
manufactured_date < "2024-04-16T12:00:00-07:00" |
il manufactured_date è prima di mezzogiorno (ora legale del Pacifico USA) del 16 aprile 2024 |
office.location:GEO_DISTANCE("1600 Amphitheater Pkwy, Mountain View, CA, 94043", 500) |
il campo di geolocalizzazione office.location si trova a una distanza di 500 metri da 1600 Amphitheater Pkwy |
NOT office.location:GEO_DISTANCE("Palo Alto, CA", 1000) |
il campo di geolocalizzazione office.location non si trova entro un raggio di 1 km da Palo Alto, in California. |
office.location:GEO_DISTANCE(34.1829, -121.293, 500) |
il campo di geolocalizzazione office.location si trova entro un raggio di 500 metri dalla latitudine 34.1829 e dalla longitudine -121.293 |
category: ANY("persona_A") AND score: IN(*, 100.0e) |
category è persona_A e score è inferiore a 100 |
office.location:GEO_DISTANCE("Mountain View, CA", 500) OR office.location:GEO_DISTANCE("Palo Alto, CA", 500) |
office.location si trova a una distanza di 500 metri da Mountain View o Palo Alto. |
(price<175 AND pet-friendly = "true") OR (price<125 AND pet-friendly = "false") |
price è inferiore a 175 e posso portare il mio animale domestico oppure price è inferiore a 125 e non posso portare il mio animale domestico |
Passaggi successivi
- Per comprendere l'impatto dei filtri sulla qualità della ricerca, valuta la qualità della ricerca. Per maggiori informazioni, vedi Valutare la qualità della ricerca.