Utilizando MongoDB Atlas Search Full-Text Search com .NET

0

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/

Compartilhe.

Sobre o autor

Criador do blog Código Simples e com mais 9 anos de experiência em TI, com títulos de MVP Microsoft na área de Visual Studio Development, Neo4j Top 50 Certificate, Scrum Master e MongoDB Evangelist. Atuando em funções analista, desenvolvedor, arquiteto, líder técnico e gestor de equipes. Mais informações em : http://jhonathansoares.com