A API Query fornece métodos de pesquisa e sugestão para criar uma interface de pesquisa ou incorporar resultados de pesquisa em um aplicativo.
Para aplicativos da Web com requisitos mínimos, considere o uso do widget da Pesquisa. Para mais informações, consulte Criar uma interface de pesquisa com o widget.
Criar uma interface de pesquisa
A criação de uma interface de pesquisa mínima requer várias etapas:
- Configurar um aplicativo de pesquisa
- Gerar credenciais do OAuth para o aplicativo
- Consultar o índice
- Exibir os resultados da consulta
É possível melhorar ainda mais a interface de pesquisa com recursos como paginação, classificação, filtragem, atributos e sugestão automática.
Configurar um aplicativo de pesquisa
Crie pelo menos um aplicativo de pesquisa para associar a cada interface de pesquisa criada. Um app de pesquisa fornece os parâmetros padrão para uma consulta, como as fontes de dados a serem usadas, a ordem de classificação, os filtros e os atributos a serem solicitados. Se necessário, é possível substituir esses parâmetros usando a API Query.
Para mais informações sobre aplicativos de pesquisa, consulte Personalizar a experiência de pesquisa no Cloud Search.
Gerar credenciais do OAuth para o aplicativo
Além das etapas em Configurar o acesso à API Google Cloud Search, também é necessário gerar credenciais OAuth para o aplicativo da Web. O tipo de credenciais criadas depende do contexto em que a API é usada.
Use as credenciais para solicitar autorização em nome do usuário. Use o escopo https://www.googleapis.com/auth/cloud_search.query
ao solicitar autorização.
Para mais informações sobre as opções de OAuth e as bibliotecas de cliente, consulte [Google Identity Platform](https://developers.google.com/identity/choose-auth{: .external target="_blank"}.
consultar o índice
Use o método search
para realizar pesquisas no índice.
Cada solicitação precisa incluir duas informações: um texto query
para corresponder aos itens e um searchApplicationId
identificando o ID do
aplicativo de pesquisa a ser usado.
O snippet a seguir mostra uma consulta à origem de dados do filme Titanic:
{
"query": "titanic",
"requestOptions": {
"searchApplicationId": "searchapplications/<search_app_id>"
},
}
Exibir resultados da consulta
Espera-se pelo menos que as interfaces de pesquisa exibam o item title
, bem como
um link para o item original. É possível melhorar ainda mais a exibição dos
resultados da pesquisa usando outras informações presentes neles,
como o snippet e os metadados.
Processar resultados complementares
Por padrão, o Cloud Search retorna resultados complementares quando há resultados insuficientes para a consulta do usuário. O campo
queryInterpretation
na resposta indica quando os resultados complementares são retornados. Se apenas
resultados complementares forem retornados, InterpretationType
será definido como REPLACE
. Se
alguns resultados para a consulta original forem retornados com resultados
complementares, InterpretationType
será definido como BLEND
. Em ambos os casos,
QueryInterpretation.Reason = NOT_ENOUGH_RESULTS_FOUND_FOR_USER_QUERY
.
Quando alguns resultados complementares forem retornados, considere fornecer
texto para indicar que foram retornados. Por exemplo, no caso de uma
REPLACE
, você pode mostrar a string "Sua pesquisa pela consulta original não
correspondeu a nenhum resultado. Mostrando resultados para consultas semelhantes."
No caso de uma BLEND
, a string "Sua pesquisa original
não encontrou resultados suficientes foi exibida". Incluindo resultados para consultas
semelhantes."
Lidar com os resultados das pessoas
O Cloud Search retorna dois tipos de "resultados de pessoas": documentos relacionados a uma
pessoa com o nome usado na consulta e informações de funcionários para uma pessoa
cujo nome é usado em uma consulta. O último tipo de resultado é uma função do recurso Pesquisa de pessoas do Cloud Search. Os resultados para essa consulta podem ser encontrados no campo structuredResults
de uma resposta da API de consulta:
{
"results": [...],
"structuredResults": [{
"person": {...}
}]
}
Desativar as otimizações, incluindo resultados complementares
Por padrão, as otimizações, como resultados complementares, estão ativadas. No entanto, é possível desativar todas as otimizações ou apenas resultados complementares no aplicativo de pesquisa e no nível da consulta:
Para desativar todas as otimizações no nível da pesquisa, incluindo resultados complementares, sinônimos e correções ortográficas, defina
QueryInterpretationConfig.force_verbatim_mode
comotrue
nos apps de pesquisa.Para desativar todas as otimizações no nível da consulta de pesquisa, incluindo resultados complementares, sinônimos e correções ortográficas, defina
QueryInterpretationOptions.enableVerbatimMode
comotrue
na consulta de pesquisa.Para desativar os resultados complementares no nível do aplicativo de pesquisa, defina
QueryInterpretationOptions.forceDisableSupplementalResults
comotrue
na consulta de pesquisa.Para desativar os resultados complementares no nível da consulta de pesquisa, defina
QueryInterpretationOptions.disableSupplementalResults
comotrue
na consulta.
Destacar snippets
Para itens retornados contendo texto indexado ou conteúdo HTML, será retornado um snippet do conteúdo. Esse conteúdo ajuda os usuários a determinar a relevância do item retornado.
Se houver termos de consulta no snippet, um ou mais intervalos de correspondência que identificam o local dos termos também serão retornados.
Use o matchRanges
para destacar o texto correspondente ao renderizar
os resultados. O exemplo de JavaScript a seguir converte o snippet em marcação HTML com cada intervalo correspondente agrupado em uma tag <span>
.
function highlightSnippet(snippet) {
let text = snippet.snippet;
let formattedText = text;
if (snippet.matchRanges) {
let parts = [];
let index = 0;
for (let match of snippet.matchRanges) {
let start = match.start || 0; // Default to 0 if omitted
let end = match.end;
if (index < start) { // Include any leading text before/between ranges
parts.push(text.slice(index, start));
}
parts.push('<span class="highlight">');
parts.push(text.slice(start, end));
parts.push('</span>');
index = end;
}
parts.push(text.slice(index)); // Include any trailing text after last range
formattedText = parts.join('');
}
return formattedText;
}
Dado o snippet:
{
"snippet": "This is an example snippet...",
"matchRanges": [
{
"start": 11,
"end": 18
}
]
}
A string HTML resultante será:
This is an <span class="highlight">example</span> snippet...
Exibir metadados
Use o campo metadata
para exibir mais informações sobre o item retornado que podem ser relevantes
para os usuários. O campo metadata
inclui createTime
e
updateTime
do item, bem como todos os dados estruturados retornáveis associados
ao item.
Para exibir os dados estruturados, use o campo
displayOptions
. O campo displayOptions
contém a etiqueta de exibição do tipo de objeto
e um conjunto de metalines
. Cada metaline é uma matriz de rótulos de exibição e pares de valores, conforme configurado no esquema.
Recuperar resultados extras
Para recuperar resultados adicionais, defina o campo start
na solicitação para o deslocamento desejado. É possível ajustar o tamanho de cada página com o campo pageSize
.
Para exibir o número de itens retornados ou para exibir controles de paginação para
navegar pelos itens retornados, use o
campo
resultCount
. Dependendo do tamanho do conjunto de resultados, será fornecido o valor real ou um valor estimado.
Classificar resultados
Use o campo sortOptions
para especificar a ordem de itens retornados. O valor sortOptions
é um objeto com dois campos:
operatorName
: um operador para a propriedade de dados estruturados para classificar. Para propriedades com vários operadores, só é possível fazer a classificação usando o operador principal de igualdade.sortOrder
: a direção da classificação,ASCENDING
ouDESCENDING
.
A relevância também é usada como chave de classificação secundária. Se nenhuma ordem de classificação for especificada em uma consulta, os resultados serão classificados apenas por relevância.
"sortOptions": {
"operatorName": "priority",
"sortOrder": "DESCENDING"
}
Adicionar filtros
Além de expressões de consulta, é possível aplicar filtros para restringir ainda mais os resultados. É possível especificar filtros no aplicativo de pesquisa e na solicitação de pesquisa.
Para adicionar filtros em uma solicitação ou um app de pesquisa, adicione o filtro no
campo dataSourceRestrictions.filterOptions[]
.
Existem duas maneiras principais de filtrar ainda mais uma origem de dados:
- Filtros de objeto, por meio da propriedade
filterOptions[].objectType
, restringem os itens correspondentes ao tipo especificado, conforme definido em um esquema personalizado. - Filtros de valor: restringem os itens correspondentes com base em um operador de consulta e no valor fornecido.
Os filtros compostos permitem combinar vários filtros de valores em expressões lógicas para consultas mais complexas.
No exemplo do esquema de filme, é possível aplicar uma restrição de idade com base no usuário atual e restringir os filmes disponíveis com base na classificação da MPAA.
{
"query": "adventure",
"requestOptions": {
"searchApplicationId": "<search_app_id>"
},
"dataSourceRestrictions": [
{
"source": {
"name": "datasources/<data_source_id>"
},
"filterOptions": [
{
"objectType": "movie",
"filter": {
"compositeFilter": {
"logicOperator": "AND"
"subFilters": [
{
"compositeFilter": {
"logicOperator": "OR"
"subFilters": [
{
"valueFilter": {
"operatorName": "rated",
"value": {
"stringValue": "G"
}
}
},
{
"valueFilter": {
"operatorName": "rated",
"value": {
"stringValue": "PG"
}
}
}
]
}
]
}
}
}
]
}
]
}
Refinar resultados com atributos
Atributos são propriedades indexadas que representam categorias para refinar os resultados da pesquisa. Use atributos para ajudar os usuários a refinar consultas de forma interativa e encontrar itens relevantes com mais rapidez.
Os atributos podem ser definidos em seu aplicativo de pesquisa e substituídos pelas configurações na sua consulta.
Ao solicitar atributos, o Cloud Search calcula os valores mais frequentes das propriedades solicitadas entre os itens correspondentes. Esses valores são retornados na resposta. Use esses valores para criar filtros que restringem os resultados em consultas subsequentes.
O padrão típico de interação com atributos é o seguinte:
- Faça uma consulta inicial especificando quais propriedades serão incluídas nos resultados do atributo.
- Renderize os resultados de pesquisa e atributo.
- O usuário seleciona um ou mais valores de atributo para refinar os resultados.
- Repita a consulta com um filtro baseado nos valores selecionados.
Por exemplo, para ativar o refinamento de consultas a filmes por ano e pela classificação da MPAA, inclua a propriedade facetOptions
na consulta.
"facetOptions": [
{
"sourceName": "datasources/<data_source_id>",
"operatorName": "year"
},
{
"sourceName": "datasources/<data_source_id>",
"operatorName": "rated"
}
]
Resultados de atributos com campos baseados em números inteiros
Também é possível criar atributos de solicitação de atributo com campos baseados em números inteiros. Por exemplo, você
pode marcar uma propriedade de número inteiro com o nome book_pages
como atributo de atributo para refinar
os resultados de uma pesquisa sobre livros com páginas "100 a 200".
Ao configurar o esquema do campo de propriedade de números inteiros, defina
isFacetable
como true
e adicione as opções de agrupamento por classes correspondentes a
integerPropertyOptions
.
Isso garante que cada propriedade com atributo inteiro tem opções de agrupamento padrão definidas.
Ao definir a lógica de opções de agrupamento por classes, forneça uma matriz de valores incrementais que representam intervalos. Por exemplo, se o usuário final especificar intervalos como
2, 5, 10, 100
, os atributos para <2
, [2-5)
, [5-10)
, [10-100)
e >=100
serão calculados.
É possível substituir atributos baseados em números inteiros definindo as mesmas opções de agrupamento como
facetOptions
na solicitação. Se necessário, o Cloud Search usa as opções de agrupamento por classes definidas no esquema quando nem o aplicativo de pesquisa nem a solicitação de consulta têm opções de atributos definidas. Os atributos definidos na consulta têm precedência sobre os definidos no app de pesquisa, e os definidos no app de pesquisa têm prioridade sobre os definidos no esquema.
Resultados de atributos por tamanho ou data do documento
Use operadores reservados para refinar os resultados da pesquisa pelo tamanho do arquivo do documento, medido em bytes ou pela data em que um documento foi criado ou modificado. Você não precisa definir um esquema personalizado, mas precisa especificar o valor operatorName
no FacetOptions
do app de pesquisa.
- Para criar atributos por tamanho de documento, use
itemsize
e defina opções de agrupamento por classes. - Para criar atributos por data de criação do documento, use
createddatetimestamp
. - Para criar atributos por data de modificação do documento, use
lastmodified
.
Como interpretar buckets de atributo
A propriedade facetResults
na resposta da consulta de pesquisa inclui a solicitação de filtro exata do usuário no campo filter
para cada bucket
.
Para atributos que não são baseados em números inteiros, facetResults
inclui uma entrada para
cada propriedade solicitada. Para cada propriedade, é fornecida uma lista de valores ou intervalos chamados de buckets
. Os valores mais frequentes são exibidos primeiro.
Quando um usuário selecionar um ou mais valores a serem filtrados, crie uma nova consulta com os filtros selecionados e consulte a API novamente.
Adicionar sugestões
Use a API de sugestões para fornecer preenchimento automático a consultas baseadas no histórico de consultas pessoais do usuário, bem como nos contatos e no corpus de documentos.
Por exemplo, a chamada a seguir fornece sugestões para a frase parcial jo.
{
"query": "jo",
"requestOptions": {
"searchApplicationId": "<search_app_id>",
"peoplePhotoOptions": {
"peoplePhotoUrlSizeInPx": 32
},
"timeZone": "America/Denver"
}
}
É possível exibir as sugestões resultantes conforme apropriado para o aplicativo.