Este artigo é uma continuação do nosso tutorial sobre os primeiros passos com o MongoDB Atlas Search, os primeiros artigos são, neles você vai encontrar uma base mais teórica para o que iremos praticar neste artigo. Você pode encontrá-los aqui:
O Que é Full Text Search?
Antes de partirmos para a prática, vale ressaltar que o Full-Text search é uma técnica de busca que permite a recuperação de documentos que contêm palavras específicas ou frases inteiras. Diferente de buscas simples por palavra-chave, o full text search considera a relevância dos resultados, permitindo buscas mais complexas e precisas.
No MongoDB Atlas Search, essa funcionalidade é implementada através do uso de índices específicos que permitem a busca textual em grandes volumes de dados de maneira eficiente. Esses índices são configurados para analisar e indexar o conteúdo dos documentos, facilitando a recuperação rápida das informações desejadas.
Bora pro código?
Antes de começarmos, certifique-se de ter configurado o MongoDB Atlas conforme descrito no artigo anterior, configurado o dataset e de ter clonado o repositório SeeSharpMovies, neste caso iremos utilizar a base de dados de filmes para este projeto. Você precisará do .NET SDK instalado em sua máquina, eu estou utilizando o .Net 8.0. O repositório oficial deste artigo é o SeeSharpMovies direto da MongoDB
Agora, vamos explorar na prática como utilizar a funcionalidade de full text search do Atlas Search em aplicações .NET. O MongoDB Atlas Search é uma poderosa ferramenta que permite a integração de capacidades avançadas de busca textual em suas aplicações, aproveitando a robustez e flexibilidade do MongoDB.
Antes de mais nada, precisamos criar índices de pesquisa dentro do Atlas. Esses índices permitem recursos do full-text search dentro em nosso banco de dados. Precisamos também especificar quais campos desejamos indexar. O Atlas Search oferece suporte a índices dinâmicos, que se aplicam a todos os campos e se adaptam a qualquer alteração no formato do documento. Mas para este tutorial, adicionaremos um índice de pesquisa para um campo específico, “título”.
1 – Dentro do Atlas, clique em “Browse Collection” para abrir o explorador de dados e visualizar os dados de amostra recém-carregados.
2- Selecione a guia “Atlas Search” na parte superior.
3 –
- Clique no botão verde “Create Search Index” para carregar o assistente de criação de índice.
- Selecione Editor Visual e clique em “Avançar”.
- Dê um nome ao seu índice. Eu deixei o nome padrão, “default”
- Para “Database and Collection”, selecione “sample_mflix” para expandir o banco de dados e selecione a coleção “movies”, eu coloquei o nome da colection na importação como “embedded_movies”, mas aqui é uma questão apenas semântica, fique a vontade para colocar o nome que quiser. Em seguida, clique em “Avançar”.
4 – Clique em “Refine Your Index” e depois em “Add Field Mapping”, pois iremos selectionar o campo “Title” como “Autocomplete”, isto vai configurar o nosso índice para fazer uma busca no título do filme, utilizando a busca por autocomplete. Você pode ver mais sobre os tipos de dados clicando aqui.
Após isto, você pode criar o seu índice. O processo leva alguns segundos, porém pode levar mais tempo de acordo com o tamanho da base e a complexidade do índice criado.
Implementando funcionalidade em .Net
Agora que o banco de dados está configurado para suportar o Atlas Search com nossos novos índices, é hora de atualizar o código no aplicativo para suportar a pesquisa. O código possui uma interface e serviço para conversar com o Atlas usando o Driver MongoDB C# que pode ser encontrado na pasta “Services”. O médoto MovieSearchByText vai ser responsável pela busca de filmes no nosso banco de dados utilizando o índice que acabamos de criar.
public IEnumerable<Movie> MovieSearchByText(string textToSearch) { // define fuzzy options SearchFuzzyOptions fuzzyOptions = new SearchFuzzyOptions() { MaxEdits = 1, PrefixLength = 1, MaxExpansions = 256 }; // define and run pipeline var movies = _movies.Aggregate().Search(Builders<Movie>.Search.Autocomplete(movie => movie.Title, textToSearch, fuzzy: fuzzyOptions), indexName: "title").Project<Movie>(Builders<Movie>.Projection .Exclude(movie => movie.Id)).ToList(); return movies; }
O método conta com a Pesquisa difusa ou Fuzzy Search permite a busca por correspondência aproximada com um termo de pesquisa, o que pode ser útil com erros de digitação ou ortografia. Portanto, configuramos algumas opções de pesquisa difusa aqui, como quão próximos do termo correto os caracteres precisam estar e quantos caracteres no início devem corresponder exatamente.
A busca via Atlas Search é realizada usando a função de agregação $search, então chamamos .Aggregate()
na coleção de filmes e depois chamamos o método “Search“`. Já o .Project()
é opcional, mas vamos incluí-lo porque não usamos o campo _id em nossa aplicação. Portanto, por questões de desempenho, é sempre bom excluir quaisquer campos que você sabe que não precisarão ser retornados.
O projeto conta já com uma implementação básica de front-end utilizando blazor, que eu não vou cobrir neste artigo, mas que você pode encontrar aqui MongoDB Atlas Search with .NET Blazor for Full-Text Search
Excelente! Agora você tem uma aplicação .Net com funcionalidade de pesquisa adicionada e um bom ponto de partida para usar a pesquisa de texto completo em seus projetos daqui para frente.
Se quiser saber mais sobre o Atlas Search, incluindo mais recursos do que apenas o preenchimento automático, você pode fazer uma incrível Oficina de pesquisa do Atlas.
Fonte: https://www.mongodb.com/developer/languages/csharp/atlas-search-with-csharp/