Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Junte-se a nós no Amazon Web Services re:Invent 2024! Saiba como usar o MongoDB para casos de uso de AI .
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
Atlaschevron-right

Tutorial: crie um mecanismo de pesquisa de filmes usando a pesquisa de texto completo do Atlas em 10 Minutos

Karen Huaulme10 min read • Published Feb 14, 2022 • Updated Sep 09, 2024
AtlasPesquisa
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Alguns recursos mencionados abaixo serão descontinuados em 30, 2025 de setembro. Saiba mais.
Oferecer aos usuários a capacidade de encontrar exatamente o que procuram em seu aplicativo é fundamental para uma experiência de usuário excepcional. Com o novo serviçoMongoDB Atlas Full-Text Search, ficou mais fácil do que nunca integrar recursos de pesquisa simples, mas sofisticados em seus aplicativos MongoDB. Para demonstrar como é fácil, vamos criar um mecanismo de pesquisa de filmes - em apenas 10 minutos.
Construído no Apache Lucene, o Full-Text Search adiciona dados de documentos a um índice de pesquisa de texto completo para tornar esses dados pesquisáveis de uma maneira escalável e de alto desempenho. Este tutorial mostrará como criar um aplicativo da web para pesquisar filmes com base em um tópico usando a coleção de dados de filmes de amostra do Atlas em um cluster de camada grátis. Criaremos um índice de pesquisa de texto completo nesses dados de amostra. Em seguida, consultaremos esse índice para filtrar, classificar e classificar esses filmes para exibir rapidamente os filmes por tópico.
Aplicação de exemplo de Full Text Search
Armados com um conhecimento básico de HTML e Javascript, aqui estão as tarefas que realizaremos:
  • ⬜ Crie um Atlas cluster e carregue dados de filme de amostra
  • ⬜ Crie um índice de pesquisa de texto completo na coleta de dados de filmes
  • Escreva um pipeline de agregação com o operador $searchBeta
  • ⬜ Crie uma API RESTful para acessar dados
  • ⬜ Chamada do front-end
Agora pegue a pipoca e prepare-se para encontrar aquele filme que está na ponta da língua há semanas.
Pegue a pipoca
Para começar, precisaremos de:
  1. Um cluster de camada grátis (M0) no MongoDB Atlas. Clique aqui para se inscrever em uma conta e implantar seu cluster gratuito no provedor de nuvem e na região de sua preferência.
  2. O conjunto de dados de amostra do Atlas carregado em seu cluster. Você pode carregar o conjunto de dados de amostra clicando no botão de elipse e em Load Sample Dataset (Carregar conjunto de dados de amostra).
    Carregar conjunto de dados de amostra
    Para obter informações mais detalhadas sobre como criar um cluster, configurar seu endereço IP, criar um usuário e carregar dados de exemplo, consulte Introdução ao MongoDB Atlas em nossa documentação.
  3. (Opcional) MongoDB Compass. Esta é a interface gráfica gratuita para MongoDB que permite que você tome decisões mais inteligentes sobre estrutura de documentos, query, indexação, validação de documentos e muito mais. A versão mais recente pode ser encontrada aqui https://www.mongodb.com/download-center/compass.
Após seu conjunto de dados de amostra ser carregado em seu banco de dados, vamos dar uma olhada mais de perto para ver no que estamos trabalhando dentro do Atlas Data Explorer. Em sua interface de usuário do Atlas, clique em collection para examinar a collection domovies no novo banco de dados dosample_mflix. Esta collection possui mais 23k documentos de filmes com informações como título, trama e elenco.
dataset de amostra
  • ✅ Gire um Atlas cluster e carregue dados de filme de amostra
  • ⬜ Crie um índice de pesquisa de texto completo na coleta de dados de filmes
  • Escreva um pipeline de agregação com o operador $searchBeta
  • ⬜ Crie uma API RESTful para acessar dados
  • ⬜ Chamada do front-end

Criar um índice de Full Text Search

Nosso mecanismo de pesquisa de filmes procurará filmes com base em um tópico. Usaremos a pesquisa de texto completo para consultar palavras e frases específicas no campo "fullplot".
A primeira coisa que precisamos é de um índice de pesquisa de texto completo. Clique na guia intitulada SearchBETA em Coleções. Clicar no botão verde Criar um índice de pesquisa abrirá uma caixa de diálogo semelhante a esta:
Criar índice de pesquisa de texto completo
Por padrão, mapeamos dinamicamente todos os campos de texto da sua collection. Isso se encaixa perfeitamente no modelo de dados flexível do MongoDB. À medida que você adiciona novos dados à collection e o esquema envolve, o mapeamento dinâmico acomodará essas alterações no esquema e adicionará esses novos dados ao índice Full-Text Search automaticamente.
Vamos aceitar as configurações padrão e clicar em Criar índice. E isso é tudo que você precisa fazer para começar a aproveitar o Lucene em seus dados do MongoDB Atlas!
  • ✅ Gire um Atlas cluster e carregue dados de filme de amostra
  • ✅ Criar um índice de pesquisa de texto completo na coleção de dados de filmes
  • Escreva um pipeline de agregação com o operador $searchBeta
  • ⬜ Crie uma API RESTful para acessar dados
  • ⬜ Chamada do front-end

Escreva o pipeline de agregação com o operador $searchbeta

As queries de pesquisa de texto completo assumem a forma de um estágio de pipeline de agregação. O estágio$searchBeta executa uma query de pesquisa no(s) campo(s) especificado(s) coberto(s) pelo índice Full-Text Search e deve ser usado como o primeiro estágio no aggregation pipeline.
Vamos usar o MongoDB Compass para ver um pipeline de agregação que faz uso desse índice do Full-Text Search. Para obter instruções sobre como conectar seu Atlas cluster ao MongoDB Compass, clique aqui.
Você não precisa usar o Compass para este estágio, mas eu realmenteadoro a interface do usuário fácil de usar que o Compass tem a oferecer. Além disso, a capacidade de visualizar os resultados por estágio facilita a solução de problemas! Para saber mais sobre o Construtor de pipeline de agregação da Compass, confira este blog.
Navegue até a guia Agregações na sample_mflix.movies coleção:
Guia Agregações

Estágio 1. $searchBeta

Pesquisa beta
Para o primeiro estágio, selecione o operador de agregação$searchBeta para pesquisar os termos "lobigoves e Vampries" no campo fullplot.
Usar a opçãode destaque retornará os destaques adicionando campos ao resultado que exibem os termos de pesquisa em seu contexto original, junto com o conteúdo do texto adjacente. (Mais sobre isso mais tarde.)
Pesquisa estendida
Observe os documentos de filme retornados no painel de visualização à direita. Se nenhum documento estiver no painel, verifique novamente a formatação no código de agregação.

Estágio 2: $project

Caixa de diálogo Projeto
Usamos $project para obter de volta apenas os campos que usaremos em nosso aplicativo de pesquisa de filmes. Também usamos o $meta operador para exibir osearchScore e searchHighlights de cada documento no conjunto de resultados.
Vamos detalhar ainda mais as peças individuais neste estágio:
PONTUAÇÃO: O "$meta": "searchScore" contém a pontuação atribuída ao documento com base na relevância.Isso significa quão bem o campofullplotdeste filme corresponde aos termos de consulta 'lobisomens e vampiros' acima.
Observe que, ao rolar a tela no painel de visualização à direita, os documentos do filme são retornados com a pontuação em ordem decrescente para que as melhores correspondências sejam fornecidas primeiro.
DETALHE: O "$meta": "searchHighlights" contém os resultados destacados.
Porque searchHighlights e searchScore não fazem parte do documento original, é necessário usar um estágio de pipeline $project para adicioná-los à saída da query.
Agora abra a matriz de destaque de um documento para mostrar os objetos de dadoscom valores e tipos de texto .
1title:"The Mortal Instruments: City of Bones"
2fullplot:"Set in contemporary New York City, a seemingly ordinary teenager, Clar..."
3year:2013
4score:6.849891185760498
5highlight:Array
6 0:Object
7 path:"fullplot"
8 texts:Array
9 0:Object
10 value:"After the disappearance of her mother, Clary must join forces with a g..."
11 type:"text"
12 1:Object
13 value:"vampires"
14 type:"hit"
15 2:Object
16 3:Object
17 4:Object
18 5:Object
19 6:Object
20 score:3.556248188018799
highlight.texts.value - texto do campo fullplot, que retornou uma correspondência. highlight.texts.type - uma correspondência ou um texto. Um hit é uma correspondência para a consulta, enquanto um texto é o conteúdo de texto adjacente à string correspondente. Usaremos isso mais tarde em nosso código de aplicativo.

Estágio 3: $limit

limit
Lembre-se de que os resultados são retornados com as pontuações em ordem decrescente, portanto, $limit: 10 trará os documentos de filme 10 mais relevantes para sua consulta de pesquisa.
Por fim, se você ver resultados no painel de visualização correto, seu pipeline de agregação está funcionando corretamente! Vamos pegar esse código de agregação com o recurso Export Pipeline to Language do Compass clicando no botão na barra de ferramentas superior.
Exporte o pipeline de agregação.
Seu código de agregação final será este:
1[
2 { $searchBeta: {
3search: {
4 query: 'werewolves and vampires',
5 path: 'fullplot' },
6 highlight: { path: 'fullplot' }
7 }},
8 { $project: {
9 title: 1,
10 _id: 0,
11 year: 1,
12 fullplot: 1,
13 score: { $meta: 'searchScore' },
14 highlight: { $meta: 'searchHighlights' }
15 }},
16 { $limit: 10 }
17]
  • ✅ Gire um Atlas cluster e carregue dados de filme de amostra
  • ✅ Criar um índice de pesquisa de texto completo na coleção de dados de filmes
  • Escreva um pipeline de agregação com o operador $searchBeta
  • ⬜ Crie uma API RESTful para acessar dados
  • ⬜ Chamada do front-end

Criar uma API REST

Agora que temos o coração do nosso mecanismo de busca de filmes na forma de um pipeline de agregação, como vamos usá-lo em um aplicativo? Há muitas maneiras de fazer isso, mas o mais fácil foi simplesmente criar uma API RESTful para expor esses dados - e, para isso, usei o HTTP Service do MongoDB Stitch.
Stitch é a plataforma sem servidor do MongoDB em que as funções escritas em Javascript são dimensionadas automaticamente para atender à demanda atual. Para criar um aplicativo Stitch, retorne à interface do usuário do Atlas e clique em Stitch em SERVIÇOS no menu esquerdo e, em seguida, clique no botão verde Criar novo aplicativo.
Nomeie seu aplicativo Stitch de FTSDemo e certifique-se de vinculá-lo ao seu cluster M0. Todas as outras configurações padrão estão bem:
Crie um novo aplicativo Stitch
Agora clique no menu 3Serviços de terceiros à esquerda e, em seguida, em Adicionar um serviço. Selecione o HTTP Service e nomeie-o de filmes:
Adicione um serviço
Clique no verde Adicionar um serviço botão, e você será direcionado para adicionar um webhook de entrada.
Na guiaConfigurações, ative Responder com resultado, defina o Método HTTP como GETe, para simplificar, vamos apenas executar o webhook como o Sistema e pular a validação.
Adicionar um webhook
Nesse editor de funções de serviço, substitua o código de exemplo pelo seguinte:
1exports = function(payload) {
2 const collection = context.services.get("mongodb-atlas").db("sample_mflix").collection("movies");
3 let arg = payload.query.arg;
4 return collection.aggregate([
5 { $searchBeta: {
6 search: {
7 query: arg,
8 path:'fullplot',
9 },
10 highlight: { path: 'fullplot' }
11 }},
12 { $project: {
13 title: 1,
14 _id:0,
15 year:1,
16 fullplot:1,
17 score: { $meta: 'searchScore'},
18 highlight: {$meta: 'searchHighlights'}
19 }},
20 { $limit: 10}
21 ]).toArray();
22};
Vamos detalhar alguns desses componentes. O MongoDB Stitch interage com sua coleção de filmes do Atlas por meio da variávelde contextoglobal. Na função de serviço, usamos essa variável de contexto para acessar a coleção sample_mflix.movies em seu cluster do Atlas:
1const collection =
2context.services.get("mongodb-atlas").db("sample_mflix").collection("movies");
Capturamos o argumento de query da carga útil:
1let arg = payload.query.arg;
Retorne o código de aggregation executado na collection colando sua aggregation no código abaixo:
1return collection.aggregate(<<PASTE AGGREGATION PIPELINE HERE>>).toArray();
Finalmente, depois de colar o código de agregação, alteramos os termos “lobisomens e vampiros” para o argumento genérico para corresponder ao argumento de consulta de carga útil da função. Caso contrário, nossos recursos de busca de filmes serão extremamente limitados.
Consulta de código
Agora você pode testar no Console abaixo do editor alterando o argumento de arg1: "hello" para arg: "werewolves and vampires".
Nota: Certifique-se de alterar AMBOS o nome do campo arg1 para arg, bem como o valor da string "hello" para "lobisomens e vampiros" - ou não funcionará.
Desenvolvedor frustrado
Console de teste
Clique em Run para verificar o resultado:
Resultados da query
Se isso estiver funcionando, parabéns! Estamos quase terminando! Certifique-se de SALVAR e implantar o serviço clicando em REVISAR E IMPLEMENTAR ALTERAÇÕES na parte superior da tela.

Use a API

O melhor de uma REST API é que ela pode ser chamada de qualquer lugar. Vamos executá-lo em nosso navegador. No entanto, se você tiver ferramentas como o Postman instaladas, sinta-se à vontade para tentar também.
Alterne para a abaConfigurações do serviço de filmes no Stitch e você notará que um URL de webhook foi gerado.
URL do Webhook
Clique no botãoCopiar e cole a URL no seu navegador. Em seguida, anexe o seguinte ao final da sua URL: ?arg='werelophyllums and vampiros'
Resultado da consulta
Se você receber uma saída como a que temos acima, felicitações! Você criou com sucesso uma API de busca de filmes!
Homer Simpson Woohoo
  • ✅ Gire um Atlas cluster e carregue dados de filme de amostra
  • ✅ Criar um índice de pesquisa de texto completo na coleção de dados de filmes
  • Escreva um pipeline de agregação com o operador $searchBeta
  • ✅ Criar uma API RESTful para acessar dados
  • ⬜ Chamada do front-end
Estamos quase lá

Finalmente! - A parte da frente

No aplicativo front-end, é necessária uma única chamada da Fetch API para recuperar esses dados. Baixe o seguinte arquivo index.html e abra-o em seu navegador. Você verá uma barra de pesquisa simples:
Barra de Pesquisa
A inserção de dados no Atlas Search gerará resultados da pesquisa de filmes porque o aplicativo está apontando para uma API existente no momento.
Agora abra o arquivo HTML com seu editor de texto favorito e familiarize-se com o conteúdo. Você notará que isso contém um container muito simples e duas funções javascript:
  • Linha 82 - userAction() será executado quando o usuário inserir uma pesquisa. Se houver uma entrada válida na caixa de pesquisa e não houver erros, chamaremos a funçãobuildMovieList().
  • Linha 125 - buildMovieList() é uma função auxiliar para userAction() que criará a lista de filmes, juntamente com suas pontuações e destaques do campo "fullplog". Observe na linha 146 que, se o highlight.texts.type === "acertar", destacamos o highlight.texts.value com a marcação.

Modifique o código frontend para usar sua API

Na função userAction(), pegamos a entrada do campo do formulário de pesquisa na linha 79 e a definimos como igual a searchString. Observe na linha 82 que webhook_url já está definido como uma API RESTful que criei em meu próprio aplicativo FTSDemo. Neste aplicativo, anexamos essa entradasearchString ao webhook_url antes de chamá-lo na API de busca na linha 111. Para tornar esse aplicativo totalmente seu, basta substituir o valorwebhook_urlexistente na linha 82 por sua própria API do filmes HTTP Service que você acabou de criar. . . . . .
Agora salve essas alterações e abra o arquivoindex.html mais uma vez em seu navegador, et pronto! Você acabou de criar seu mecanismo de pesquisa de filmes usando índices de pesquisa de texto completo. . . . Que tipo de filme você quer assistir?!
Demonstração de screencast

Isso é um envoltório!

Agora que você acabou de ver como é fácil criar uma pesquisa simples e avançada em um aplicativo com o MongoDB Atlas Full-Text Search, vá em frente e experimente outros recursos mais avançados, como digitação antecipada ou correspondência difusa, para seus resultados finos -pesquisas granulares. Confira nossa documentação$searchBeta para outras possibilidades.
eu encontrarei você
Aproveite o poder do Apache Lucene para algoritmos de pesquisa eficientes, mapeamento de campo estático e dinâmico para indexação flexível e escalável, tudo isso usando a mesma linguagem de query do MongoDB (MQL) que você já conhece e ama, falada em nossa melhor impressão de Liam Neeson O MongoDB agora tem um conjunto muito específico de habilidades. Competências que adquiriram ao longo de uma carreia muito longa. Competências que fazem do MongoDB um SONHO para programadores como você.

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Analisando analyzers para criar o índice correto do Atlas Search para seu aplicativo


Aug 28, 2024 | 8 min read
Artigo

Como pausar e retomar clusters do Atlas de maneira fácil


Sep 11, 2024 | 5 min read
Tutorial

Armazenamento de mídia contínuo: integrando o armazenamento de Blobs do Azure e o MongoDB com o Spring Boot


Nov 05, 2024 | 9 min read
Tutorial

Conecte com segurança o MongoDB aos clusters Kubernetes oferecidos na nuvem


Sep 09, 2024 | 4 min read
Sumário