Se tiver uma app de pesquisa que use dados estruturados ou dados não estruturados com metadados, pode usar os metadados para filtrar as suas consultas de pesquisa. Esta página explica como usar campos de metadados para restringir a pesquisa a um conjunto específico de documentos.
Antes de começar
Certifique-se de que criou uma app e carregou dados estruturados ou dados não estruturados com metadados. Para mais informações, consulte o artigo Crie uma app de pesquisa.
Exemplo de metadados
Reveja este exemplo de metadados para quatro ficheiros PDF (document_1.pdf
,
document_2.pdf
, document_3.pdf
e document_4.pdf
). Estes metadados estariam num ficheiro JSON num contentor do Cloud Storage, juntamente com os ficheiros PDF. Pode
consultar este exemplo à medida que lê esta página.
{"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"}}
Sintaxe das expressões de filtro
Certifique-se de que compreende a sintaxe da expressão de filtro que vai usar para definir o filtro de pesquisa. A sintaxe da expressão de filtro pode ser resumida pela seguinte forma Backus-Naur alargada:
# 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.
Pesquise através de um filtro de metadados
Para pesquisar através de um filtro de metadados, siga estes passos:
Determine o campo de metadados a usar para filtrar as suas consultas de pesquisa.
Por exemplo, para os metadados em Antes de começar, pode usar o campo
category
como filtro de pesquisa. Quando filtrar dados estruturados, como no exemplo de metadados, especifique o caminho completo para o campo:structData.category
. Em seguida, os utilizadores podem filtrar porpersona_A
,persona_B
oupersona_C
, para que a pesquisa seja restrita aos documentos associados à personagem que lhes interessa.Tornar o campo de metadados indexável:
Na Google Cloud consola, aceda à página Aplicações de IA e, no menu de navegação, clique em Apps.
Clique na sua app de pesquisa.
No menu de navegação, clique em Dados.
Clique no separador Esquema. Este separador mostra as definições de campo atuais.
Clique em Edit.
Selecione a caixa de verificação Indexável para o campo que quer tornar indexável.
Clique em Guardar. Para mais informações, consulte o artigo Configure as definições dos campos.
Encontre o ID da loja de dados. Se já tiver o ID do armazenamento de dados, avance para o passo seguinte.
Na Google Cloud consola, aceda à página Aplicações de IA e, no menu de navegação, clique em Armazenamentos de dados.
Clique no nome do seu arquivo de dados.
Na página Dados da sua loja de dados, obtenha o ID da loja de dados.
Receber resultados da pesquisa.
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" }'
Substitua o seguinte:
PROJECT_ID
: o ID do seu projeto.DATA_STORE_ID
: o ID do seu armazenamento de dados.QUERY
: o texto da consulta a pesquisar.FILTER
: opcional. Um campo de texto que lhe permite filtrar um conjunto de campos especificado através da sintaxe de expressão de filtro. O valor predefinido é uma string vazia, o que significa que não é aplicado nenhum filtro.
Por exemplo, suponhamos que importou os quatro ficheiros PDF com metadados da secção Antes de começar. Quer pesquisar documentos que contenham a palavra "reivindicações" e consultar apenas documentos com um valor de
category
depersona_A
. Pode fazê-lo incluindo as seguintes declarações na sua chamada:"query": "claims", "filter": "structData.category: ANY(\"persona_A\")"
Para mais informações, consulte o separador REST em Obtenha resultados da pesquisa para uma app com dados estruturados ou não estruturados.
Clique para ver uma resposta de exemplo.
Se fizer uma pesquisa como a do procedimento anterior, pode esperar receber uma resposta semelhante à seguinte. Tenha em atenção que a resposta inclui os três documentos que têm um valor de
category
persona_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": {} }
Exemplos de expressões de filtro
A tabela seguinte apresenta exemplos de expressões de filtro.
Filtro | Só devolve resultados para documentos em que: |
---|---|
category: ANY("persona_A") |
o campo de texto category é persona_A |
score: IN(*, 100.0e) |
O campo numérico score é superior a infinito negativo e inferior a 100,0 |
non-smoking = "true" |
o valor booleano non-smoking é verdadeiro |
pet-friendly = "false" |
O valor booleano pet-friendly é falso |
manufactured_date = "2023" |
o manufactured date for em qualquer altura de 2023 |
manufactured_date >= "2024-04-16" |
A data de início da subscrição é igual ou posterior a 16 de abril de 2024manufactured_date |
manufactured_date < "2024-04-16T12:00:00-07:00" |
O manufactured_date for antes das 12:00 (Hora Legal do Pacífico) a 16 de abril de 2024 |
office.location:GEO_DISTANCE("1600 Amphitheater Pkwy, Mountain View, CA, 94043", 500) |
O campo de geolocalização office.location está a uma distância de 500 m de 1600 Amphitheater Pkwy |
NOT office.location:GEO_DISTANCE("Palo Alto, CA", 1000) |
O campo de geolocalização office.location não está num raio de 1 km de Palo Alto, Califórnia. |
office.location:GEO_DISTANCE(34.1829, -121.293, 500) |
O campo de geolocalização office.location está num raio de 500 m da latitude 34,1829 e da longitude -121,293 |
category: ANY("persona_A") AND score: IN(*, 100.0e) |
category é persona_A e score é inferior a 100 |
office.location:GEO_DISTANCE("Mountain View, CA", 500) OR office.location:GEO_DISTANCE("Palo Alto, CA", 500) |
office.location está a uma distância de 500 m de Mountain View ou Palo Alto. |
(price<175 AND pet-friendly = "true") OR (price<125 AND pet-friendly = "false") |
price é inferior a 175 e posso levar o meu animal de estimação, ou price é inferior a 125 e não posso levar o meu animal de estimação |
O que se segue?
- Para compreender o impacto dos filtros na qualidade da pesquisa, avalie a qualidade da pesquisa. Para mais informações, consulte Avalie a qualidade da pesquisa.