DevSecOps

17 jan, 2018

Criando buscas inteligentes com Azure Search  – Configurando o Ambiente

Publicidade

Introdução

Com a evolução das plataformas e softwares como serviço, podemos disponibilizar mais tempo e foco ao nosso negócio em si, deixando então cada responsabilidade para quem já é especializado no mesmo. Imagine que iremos iniciar um projeto onde teremos como foco a venda de ingressos para eventos específicos, ou seja, teremos que dar a maior atenção em especializar este modelo de serviço, já que é o nosso principal negócio.

Por mais que o nosso negócio em si seja a venda de ingressos para eventos, teremos que oferecer ferramentas como autenticação no website ou aplicativo. Algumas ferramentas de back office serão necessárias para gerenciar algum processo interno como no setor financeiro ou de atendimento ao consumidor, e com certeza, nosso site ou aplicativo precisará de algum motor de busca para que os usuários possam utiliza-lo como facilitador em encontrar os seus ingressos desejados, seja por nome, cidade, tipo de evento, etc.

É neste ponto em que o Azure Search irá nos ajudar a integrar a nossa base de dados, com um motor de busca que iremos disponibilizar aos nossos usuários. Mas isto é muito simples de se fazer, um simples LIKE no banco de dados resolve este problema, certo? Certo, pode até resolver uma parte do problema, mas devemos lembrar que uma coisa é fazer uma clausula no banco de dados pesquisando por alguns campos, outra coisa é aplicar técnicas específicas para busca e ou pesquisa.

O resumo que você acabou der ler acima é uma visão geral sobre o tema: Busca como Serviço ou Search as a Service, mais conhecido por Azure Search na plataforma de nuvem da Microsoft. Caso queira saber mais a respeito da plataforma, clique aqui e confira o primeiro artigo desta série.

Na Prática

Para começarmos a criar o nosso serviço de busca, primeiramente precisamos efetuar o procedimento básico, já conhecido por todos.

  1. Criar Recurso
  2. Pesquisar por Azure Search

  1. Escolha um endereço para o seu serviço e lembre-se que este é o endereço principal para as chamadas REST, caso necessário.
  2. Escolha a assinatura em que deseja vincular o serviço.
  3. Indique o Grupo de Recursos onde deseja manter o serviço. Gostaria de fazer um parentese neste item, pois vejo que esta informação é criada de forma aleatória, ou seja, sem uma lógica ou padrão, porém, este campo é de grande utilidade quando queremos dividir nossos serviços dentro de uma assinatura. Neste caso acima, criei um grupo de recursos específico para exemplos e tutoriais, futuramente eu excluo somente o grupo, sem ter que ficar procurando item por item.
  4. A localização determina em qual região seu serviço será hospedado, é de grande importância sempre escolher o local onde estão localizados os usuários do site, pois irá impactar diretamente na latência/resposta da informação.
  5. Por fim, escolha a camada de preço em que deseja trabalhar, como esta aplicação é somente para fins de exemplo, iremos utilizar o serviço Free.
  6. Clique em Criar.

Agora que já temos nosso serviço criado, estamos prontos para configurar a importação dos dados e criação do índice de busca.

  1. Clique em Importar Dados para inicializarmos uma nova base de dados.
  2. Uma fonte de dados é solicitado para que possamos trazer os dados até o nosso serviço e criar o índice em questão.
  3. Como vocês podem perceber, temos várias opções para conectar o nosso serviço de busca com uma fonte de dados.
  4. Amostras : É uma base de dados pronta que o Azure oferece com um exemplo de serviço de aluguel e vendas de imoveis. Iremos utilizar esta opção por se tratar de um exemplo.
  5. Banco de Dados SQL do Azure : Trata-se de banco de dados como serviço, no caso, SQL Server e que esteja criado dentro da sua assinatura.
  6. SQL Server nas VMs do Azure : Trata-se de banco de dados hospedado dentro de alguma máquina virtual do Azure.
  7. DocumentDB : Trata-se do banco de dados NoSQL da Microsoft, hoje conhecido por CosmosDB.
  8. Armazenamento de Blob : Trata-se do serviço de storage do Azure, neste caso podemos indexar os metadados dos nossos arquivos/blobs como conteúdo dos arquivos, titulo, texto, datas, etc.
  9. Armazenamento de Tabelas:  Trata-se do serviço de storage do Azure, onde podemos armazenar dados no formato chave-valor.
  10. Por fim, selecionamos a base de dados oferecida como amostra pelo Azure para efetuarmos os nossos testes.
  11. Clique em Selecionar.

Agora que já temos a nossa base de dados importada, precisamos configurar os índices necessários para que o Azure Search comece a trabalhar em cima das informações que serão entregues aos interessados.

Um índice nada mais é do que uma coleção de documentos e outros procedimentos que são utilizadas pelo serviço de pesquisa do Azure. Por exemplo, um índice está para uma tabela como um documento está para as suas linhas internas.

  1. Clique em Adicionar Ínidice de Destino
  2. Escolha um nome para o seu Índice em questão
  3. Escolha a Chave que corresponde ao seu índice, lembrando que todo todo índice deve ter uma chave. Apenas um campo pode ser a chave, e seu tipo deve ser configurado para Edm.String.
  4. As colunas que vocês podem ver neste passo correspondem ao tipo de mecanismo que a mesma em questão pode oferecer aos que consomem o serviço, ou seja, percebam que a coluna beds será retornada em um resultado de pesquisa (Retrievable) e poderá ser utilizada como campo de pesquisa em um filtro (Filterable), que poderá ser classificada por este campo (Sortable) e também poderá ser utilizado para retornar uma pesquisa facetada ou agrupada com valores repetidos. Exemplo: várias informações que se enquadram dentro de uma mesma categoria (Facetable). Notem que a única coluna que não foi definida e selecionada para este campo foi a a opção Searchable, pois de acordo com as políticas dos índices, valores do tipo INT não podem ser utilizados como critério de pesquisa.

Quando configuramos os campos para o nosso índice, temos a opção de trabalhar com analisador de linguagem que é um componente de pesquisa que realiza análises lexicais usando as regras linguísticas do idioma em questão.

Todo campo pesquisável possui uma propriedade a ser analisada. Se o seu índice contiver cadeias traduzidas, como campos separados para texto em inglês e chinês, você pode especificar analisadores de idiomas em cada campo para contar com o poder de análise do Azure Search. Hoje contamos com um suporte de 35 analisadores pelo Lucene e 50 da própria Microsoft (Office e Bing).

Outro detalhe muito bacana que temos disponível no Azure Search, é o suporte ao Suggester ou AutoComplete que nada mais é do que um serviço oferecido para que você utilize nas suas interfaces, onde o usuário vai digitando e uma caixa com as opções é exibida de acordo com o texto que está sendo inserido.

Um exemplo bem comum para este tipo de cenário são os sites de passagens aéreas ou de hotéis onde você vai digitando o destino e logo abaixo vai completando com as localidades relacionadas. Para que você possa utilizar este serviço, é necessário ativa-lo como vocês podem ver na imagem abaixo.

Após todos os campos do nosso índice estiverem configurados, vamos criar um indexador, no qual será responsável por atualizar o nosso índice de forma automatizada.

  1. Digite o nome do indexador
  2. Selecione o período em que o indexador irá alimentar o índice com as novas informações (esta opção não pode ser utilizada de forma automatizada quando estamos trabalhando com uma base de amostras ou testes ou em base de dados já existentes).
  3. Em opções avançadas podemos ajustar configurações onde possa ocorrer falhas ou operações em batch.

Com tudo configurado, podemos ver no painel do Azure todos os ajustes feitos passo a passo.

  1. Url de acesso ao nosso serviço, caso for utilizar via API Rest.
  2. Informações sobre o status dos Indexadores.
  3. Informações sobre nossa fonte de dados selecionada.

Agora que temos todo o esquema configurado, podemos fazer os testes diretamente no Portal, onde temos um painel totalmente à disposição para efetuarmos as chamadas necessárias e visualizar o resultado mais rapidamente, sem ter que criar uma integração.

O Search Explorer permite que você formule consultas com os resultados retornados em JSON diretamente no portal Azure. O Search Explorer também faz consultas em tempo real onde é fornecido uma URL de solicitação que você pode utilizar em seus aplicativos.

Para utilizar o Search Explorer não é necessário digitar nenhuma linha de código, pois a ideia desta ferramenta é utilizar em tempo de configuração e implantação para efetuar os devidos testes necessários. Além do recurso citado acima, contamos também com um alto poder de consulta onde contamos com palavras reservadas para compor a QUERY, as duas mais utilizadas são: SEARCH e FILTER.

Uma consulta com a palavra reservada SEARCH procura um ou mais termos em todos os campos PESQUISÁVEIS no índice que criamos logo acima e funciona como você esperaria em um mecanismo de pesquisa comum. Uma consulta com a palavra reservada FILTER avalia uma expressão booleana em todos os campos FILTRÁVEIS em um índice.

Diferentemente das consultas SEARCH, as consultas FILTER fazem a correspondência exata do conteúdo de um campo, o que significa que elas diferenciam letras maiúsculas de minúsculas para os campos de texto. Além das duas palavras reservadas acima, contamos também com outras palavras que nos ajudam a criar PAGINAÇÃO, ORDENAÇÃO, REALCE DE OCORRÊNCIA, e ainda utilizar sintaxe de consulta LUCENCE.

Bom pessoal, neste artigo aprendemos a criar e configurar o Azure Search desde a integração com a base de dados até a criação do índice e do indexador responsável por popular as informações dentro do serviço. Em nosso próximo artigo iremos aprender a fazer a integração com o Azure Search através da SDK e pela API Rest.

Por hoje é só, espero ter ajudado a todos e se tiverem alguma dúvida, deixe o seu comentário logo abaixo!

Referências