Design de aplicativos

Typeahead: Desenvolva com o Couchbase Full-Text Search e o Node.js

No último ano, mais ou menos, escrevi vários tutoriais sobre o pesquisa de texto completo (FTS) do Couchbase, a maioria dos quais são exemplos específicos de como fazer algo com um dos SDKs e nunca têm nada a ver com o aplicativo por trás dele. Um dos muitos aplicativos realistas possíveis inclui o uso de um recurso de typeahead ou de sugestão de dados em um formulário de aplicativo da Web. Com base na entrada do usuário, os resultados possíveis são pesquisados e exibidos.

Veremos como criar um formulário typeahead usando o serviço de pesquisa de texto completo em CouchbaseNode.js e jQuery para unir tudo isso.

Antes de nos envolvermos demais, pressupõe-se que você já tenha o Couchbase Server 5.0+ instalado e configurado com a pesquisa de texto completo ativada. Supõe-se também que você já tenha o Node.js instalado, pois a API será alimentada com o Node.js e o Express Framework.

Criação de um conjunto de dados NoSQL com índices FTS

Ao trabalhar com o FTS, você pode estar usando um de um número potencialmente ilimitado de cenários de busca. Vamos ser um pouco mais específicos para o propósito deste exemplo.

Vamos supor que estejamos trabalhando com dados de música e que nosso objetivo seja pesquisar músicas com base no artista, no álbum ou no título da música. Vamos supor que cada um de nossos documentos NoSQL tenha o seguinte formato:

Não é o documento JSON mais complexo, mas poderia ser, se quiséssemos. Para fins deste exemplo, vamos nos preocupar apenas com o título e o artistaembora não fosse necessário muito mais esforço para expandir.

Para usar o FTS, precisaremos criar um índice especial no Couchbase que se parece com o seguinte:

Para resumir, precisamos criar um nome para o índice, especificar o mapeamento de tipos e definir os campos que serão indexados, todos os quais serão armazenados no próprio índice.

Ao criar o índice, é importante armazenar o campo, caso contrário, não teremos nada para exibir em nosso typeahead.

Desenvolvimento de um ponto de extremidade de API RESTful do Node.js para pesquisa

Agora que temos alguns dados no banco de dados e um índice criado para pesquisa, podemos criar um endpoint de API com o Node.js. O objetivo dessa API é atuar como um endpoint a ser usado pelo nosso formulário de pesquisa. Afinal de contas, não queremos que nosso frontend voltado para o cliente acesse o banco de dados diretamente, pois isso não seria seguro.

Em seu computador, crie um novo projeto e execute o seguinte na linha de comando:

Os comandos acima criarão um novo package.json e instalar as poucas dependências do nosso projeto. Usaremos o Couchbase SDK com o Express Framework e instalaremos um pacote para lidar com o compartilhamento de recursos entre origens (CORS).

Como nosso aplicativo é pequeno, vamos criar um app.js em nosso projeto para conter todo o nosso código. Podemos fazer o bootstrap com o seguinte:

No código acima, importamos nossas dependências baixadas, configuramos o Express e as conectamos à nossa instância do Couchbase. Você precisará trocar as informações de conexão pelas da sua instância real do banco de dados.

O /pesquisa é onde toda a mágica vai acontecer. Vamos nos aprofundar nisso:

Primeiro, definimos nossa consulta como uma consulta de correspondência em relação ao nosso índice específico. A consulta de correspondência usará o texto que for passado por meio dos parâmetros de consulta da solicitação. Também usaremos uma pesquisa difusa com um valor de 1 para acomodar erros de ortografia das palavras.

Antes de executarmos a consulta, definimos que queremos o título e artista de volta aos resultados. Esses são os mesmos campos que adicionamos ao nosso índice.

Após a execução bem-sucedida da consulta, analisamos nossos resultados para retornar apenas o que desejamos, em vez dos metadados extras que retornam com a resposta.

Usando uma solicitação cURL, você pode acessar http://localhost:3000/search?query=swift e ver vários resultados, dependendo do seu conjunto de dados.

Projetando um front-end com as bibliotecas jQuery e Typeahead

A pesquisa com cURL tem seus valores, mas, na maioria das vezes, não é o que queremos fazer. Em vez disso, devemos criar um front-end voltado para o cliente usando tecnologias da Web prontamente disponíveis.

Há muitas bibliotecas em potencial por aí, mas vamos usar a typeahead.js que é mantido pelo Twitter. Você precisará fazer o download, mas lembre-se de que usaremos a versão 0.10.5 da biblioteca devido a bugs na versão mais recente. Perdi boa parte do dia tentando solucionar problemas da biblioteca apenas para descobrir isso.

Crie um projeto que contenha a seguinte estrutura:

Sim, você precisará de Guidão.js e jQuery para ter sucesso com esse frontend. Até onde eu sei, a versão não importa, nós nos preocupamos apenas com a versão da nossa biblioteca typeahead.

No âmbito do projeto index.html inclua o seguinte:

Ignorando o fato de que acabamos de fazer a marcação HTML básica para incluir nossos estilos e scripts, avance para nossa função typeahead. Para a configuração, mostraremos dicas pop-up para todos os registros encontrados, exigiremos que pelo menos 3 caracteres estejam presentes, não destacaremos palavras correspondentes e limitaremos nossos resultados à exibição de 5 itens. Sinta-se à vontade para ajustar as configurações de acordo com suas especificações.

Na próxima seção, definimos nossa displayKey. Sabemos que estamos recebendo um array de objetos de volta e um id é uma das propriedades desses objetos. Queremos que esse valor seja exibido em nosso formulário após a seleção. Para a fonte de dados, estamos fazendo uma solicitação GET ao nosso endpoint de API e passando a resposta de volta à nossa biblioteca typeahead. Tudo será renderizado no modelos área.

Conclusão

Você acabou de ver como usar um typeahead, geralmente chamado de sugestões automáticas ou preenchimento automático, usando jQuery, Node.js e pesquisa de texto completo (FTS) no Couchbase. Há muitos casos de uso quando se trata de pesquisa de texto completo e muitas bibliotecas diferentes disponíveis para a funcionalidade typeahead. Este tutorial serve mais ou menos para lhe dar uma ideia para o futuro.

Para obter mais informações sobre como usar o Couchbase com o Node.js, consulte o Portal do desenvolvedor do Couchbase.

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por Nic Raboy, defensor dos desenvolvedores, Couchbase

Nic Raboy é um defensor das modernas tecnologias de desenvolvimento móvel e da Web. Ele tem experiência em Java, JavaScript, Golang e uma variedade de estruturas, como Angular, NativeScript e Apache Cordova. Nic escreve sobre suas experiências de desenvolvimento relacionadas a tornar o desenvolvimento móvel e da Web mais fácil de entender.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.