O widget da Pesquisa fornece uma interface de pesquisa personalizada para aplicativos da Web. O widget requer apenas uma pequena quantidade de HTML e JavaScript para implementar e habilita recursos de pesquisa comuns, como atributos e paginação. Também é possível personalizar partes da interface com CSS e JavaScript.
Se você precisar de mais flexibilidade do que o oferecido pelo widget, use a API de consulta. Para informações sobre como criar uma interface de pesquisa com a API de consulta, consulte Como criar uma interface de pesquisa com a API de consulta.
Criar uma interface de pesquisa
A criação da interface de pesquisa requer várias etapas:
- Configurar um app de pesquisa
- Gerar um ID do cliente para o app
- Adicionar marcação HTML à caixa de pesquisa e aos resultados
- Carregar o widget na página
- Inicializar o widget
Configurar um app de pesquisa
Cada interface de pesquisa precisa ter um app de pesquisa definido no Admin Console. O aplicativo de pesquisa fornece mais informações para a consulta, como as fontes de dados, os atributos e as configurações de qualidade da pesquisa.
Para criar um app de pesquisa, consulte Crie uma experiência de pesquisa personalizada.
Gerar um ID do cliente para o app
Além das etapas em Configurar o acesso à API Google Cloud Search. você também precisa gerar um ID do cliente para o aplicativo da Web.
Ao configurar o projeto:
- Selecione o tipo de cliente do navegador da Web
- Forneça o URI de origem do seu aplicativo.
- Anote o ID do cliente que foi criado. Você precisará dele para concluir as próximas etapas. A chave secreta do cliente não é necessária para o widget.
Para mais informações, consulte OAuth 2.0 para aplicativos da Web do cliente.
Adicionar marcação HTML
O widget requer uma pequena quantidade de HTML para funcionar. Forneça:
- Um elemento
input
para a caixa de pesquisa. - um elemento para ancorar a sugestão pop-up;
- um elemento para conter os resultados da pesquisa;
- (opcional) um elemento para conter os controles de atributos.
O snippet HTML a seguir mostra o HTML de um widget de pesquisa, em que o
Os elementos a serem vinculados são identificados pelo atributo id
:
Carregar o widget
O widget é carregado dinamicamente por meio do script do carregador. Para incluir
no carregador, use a tag <script>
conforme mostrado:
É necessário fornecer um callback onload
na tag do script. A função é chamada quando o carregador está pronto. Quando o carregador estiver pronto, continue a carregar o widget
chame gapi.load()
para carregar os módulos do cliente da API, do Login do Google e do Cloud Search.
A função initializeApp()
é chamada depois que todos os módulos são
carregado.
Inicializar o widget
Primeiro, inicialize a biblioteca de cliente chamando
gapi.client.init()
ou gapi.auth2.init()
pelo ID do cliente gerado
e o escopo https://www.googleapis.com/auth/cloud_search.query
. Em seguida, use
os objetos gapi.cloudsearch.widget.resultscontainer.Builder
e
Classes gapi.cloudsearch.widget.searchbox.Builder
para configurar o widget.
e vinculá-lo a seus elementos HTML.
No exemplo a seguir, mostramos como inicializar o widget:
O exemplo acima se refere a duas variáveis para configuração definidas como:
Personalizar a experiência de login
Por padrão, o widget solicita que os usuários façam login e autorizem o app no momento em que começam a digitar uma consulta. Use o Login do Google para sites para oferecer uma experiência de login mais personalizada para os usuários.
Autorizar usuários diretamente
Use o recurso Fazer login com o Google para monitorar o estado de login do
e faça login ou logout dos usuários conforme necessário. Por exemplo, o seguinte
exemplo observa o isSignedIn
para monitorar as mudanças de login e
usa o GoogleAuth.signIn()
para iniciar o login com um botão
clique em:
Para mais detalhes, consulte Fazer login com o Google.
Usuários com login automático
Para simplificar ainda mais a experiência de login, pré-autorize o aplicativo em nome dos usuários da sua organização. Essa técnica também é útil se você usar o Cloud Identity Aware Proxy para proteger o aplicativo.
Para mais informações, consulte Usar o Login do Google com apps de TI.
Personalize a interface
É possível alterar a aparência da interface de pesquisa com uma combinação de técnicas:
- Substituir os estilos por CSS.
- Decorar os elementos com um adaptador.
- Criar elementos personalizados com um adaptador.
Substituir os estilos por CSS
O widget da Pesquisa vem com o próprio CSS para estilizar elementos de sugestão e de resultados, bem como os controles de paginação. É possível alterar esses elementos conforme necessário.
Durante o carregamento, o widget de pesquisa carrega dinamicamente sua folha de estilo padrão. Isso ocorre depois que as folhas de estilo do aplicativo são carregadas, aumentando a prioridade das regras. Para garantir que seus próprios estilos tenham precedência sobre os estilos padrão, use seletores de ancestral para aumentar a especificidade das regras padrão.
Por exemplo, a regra a seguir não tem efeito se carregada em um ambiente
Tag link
ou style
no documento.
.cloudsearch_suggestion_container {
font-size: 14px;
}
Em vez disso, qualifique a regra com o código ou a classe do contêiner ancestral declarado na página.
#suggestions_anchor .cloudsearch_suggestion_container {
font-size: 14px;
}
Para ver uma lista de classes de suporte e exemplos de HTML produzidos pelo widget, consulte a referência Classes CSS compatíveis.
Decorar os elementos com um adaptador
Para decorar um elemento antes da renderização, crie e regere uma
que implementa um dos métodos de decoração, como
decorateSuggestionElement
ou decorateSearchResultElement.
Por exemplo, os adaptadores a seguir adicionam uma classe personalizada aos elementos sugestão e resultado.
Para registrar o adaptador ao inicializar o widget, use o setAdapter()
da respectiva classe Builder
:
Os decoradores podem modificar os atributos do elemento de contêiner, bem como quaisquer elementos filhos. Elementos filho podem ser adicionados ou removidos durante a decoração. No entanto, se você for fazer alterações estruturais nos elementos, é melhor criá-los diretamente em vez de decorar.
Criar elementos personalizados com um adaptador
Para criar um elemento personalizado para uma sugestão, um contêiner de atributo ou um resultado de pesquisa, faça o seguinte:
criar e registrar um adaptador que implementa
createSuggestionElement
,
createFacetResultElement
,
ou createSearchResultElement
cada vez.
Os adaptadores a seguir ilustram a criação de sugestões personalizadas e resultados da pesquisa
usando tags HTML <template>
.
Para registrar o adaptador ao inicializar o widget, use o setAdapter()
da respectiva classe Builder
:
Como criar elementos de atributos personalizados com o createFacetResultElement
está sujeito a diversas restrições:
- É necessário anexar a classe CSS
cloudsearch_facet_bucket_clickable
ao em que os usuários clicam para alternar um bucket. - É necessário unir cada bucket em um elemento contêiner com o CSS
classe
cloudsearch_facet_bucket_container
. - Não é possível renderizar os buckets em uma ordem diferente da que eles aparecem na resposta.
Por exemplo, o snippet a seguir renderiza atributos usando links em vez de caixas de seleção.
Personalizar o comportamento da pesquisa
As configurações do app de pesquisa representam a configuração padrão de uma interface de pesquisa e são estáticas. Para implementar filtros ou atributos dinâmicos, por exemplo, permitir que os usuários alternem as origens de dados, é possível substituir as configurações do app de pesquisa interceptando a solicitação de pesquisa com um adaptador.
Implemente um adaptador com o
interceptSearchRequest
para modificar solicitações feitas ao
API Search
antes da execução.
Por exemplo, o seguinte adaptador intercepta solicitações para restringir consultas a uma origem selecionada pelo usuário:
Para registrar o adaptador ao inicializar o widget, use o
setAdapter()
ao criar a ResultsContainer
O HTML a seguir é usado para exibir uma caixa de seleção para filtragem por origens:
O código a seguir escuta a alteração, define a seleção e executa a consulta novamente, se necessário.
Também é possível interceptar a resposta da pesquisa implementando
interceptSearchResponse
no adaptador.
Fixar a versão da API
Por padrão, o widget usa a versão estável mais recente da API. Para bloquear um
Para uma versão específica, defina o parâmetro de configuração cloudsearch.config/apiVersion
.
para a versão preferencial antes de inicializar o widget.
A versão da API será definida como 1.0 por padrão caso não seja configurada ou tenha um valor inválido.
Fixar a versão do widget
Para evitar alterações inesperadas nas interfaces de pesquisa, defina o
parâmetro de configuração cloudsearch.config/clientVersion
, conforme mostrado:
gapi.config.update('cloudsearch.config/clientVersion', 1.1);
A versão do widget será definida como 1.0 por padrão caso não seja configurada ou tenha um valor inválido.
Proteja a interface de pesquisa
Os resultados da pesquisa contêm informações altamente confidenciais. Siga as práticas recomendadas para proteger aplicativos da Web, especialmente contra ataques de clickjacking (link em inglês).
Para mais informações, consulte o Projeto guia OWASP (em inglês).
Ativar depuração
Usar interceptSearchRequest
para ativar a depuração do widget de pesquisa. Exemplo:
if (!request.requestOptions) {
// Make sure requestOptions is populated
request.requestOptions = {};
}
// Enable debugging
request.requestOptions.debugOptions = {enableDebugging: true}
return request;