Introdução ao MongoDB Atlas Search e Java
Aasawari Sahasrabuddhe7 min read • Published Jul 30, 2024 • Updated Jul 30, 2024
APLICATIVO COMPLETO
Avalie esse Tutorial
O Atlas Search MongoDB é uma pesquisa de texto completo incorporada disponível no MongoDB Atlas, que fornece uma experiência perfeitamente escalável para criar funcionalidades de aplicativos baseados em relevância. Construído no Apache Lucene, o recurso Atlas Search oferece suporte a um amplo escopo de funcionalidades de pesquisa sem a necessidade de aplicativos adicionais para lidar com os recursos de pesquisa.
Nesta série de tutoriais, afundaremos os conceitos do Atlas Search em detalhes e construiremos um aplicativo de amostra usando o Spring Boot. Esses artigos o guiarão pelo processo de criação de índices de pesquisa e implementação de funcionalidades de pesquisa em documentos usando recursos avançados, como pesquisas difusas, preenchimento automático e muito mais.
Na primeira parte desta série, abordaremos como criar índices de pesquisa utilizando vários métodos:
- Interface do usuário do Atlas: Uma interface amigável para gerenciar índices de pesquisa
- Atlas CLI: Interface de linha de comando para um controle mais direto
- Aplicativo Spring Boot: gerenciando índices programaticamente em seu aplicativo
Ao final deste tutorial, você terá uma sólida compreensão de como aproveitar o MongoDB’s Atlas Search para aprimorar os recursos de pesquisa do seu aplicativo.
Vamos começar!
Abaixo estão os pré-requisitos necessários para começar.
- Java versão 17+
Observação: a camada grátis ou M0 permite que apenas três índices do Atlas Search sejam criados de uma só vez. Para criar mais de três de cada vez, você deve atualizar para M2/M5 ou superior. Além disso, se você deseja criar um índice usando CLI e drivers, certifique-se de atualizar o cluster para M10 ou superior.
Índices de banco de dados tradicionais, como árvores B ou índices de hash no MongoDB, melhoram o desempenho da consulta ao permitir que o banco de dados localize dados rapidamente sem digitalizar todos os documentos. Eles geralmente são usados para consultas de correspondência exata, consultas de intervalo e operações de classificação.
Por outro lado, os índices doAtlas Search são projetados para Atlas Search de texto completo, suportando query de texto avançadas, pontuação de relevância e análise de texto. É uma estrutura de dados especializada que organiza os dados para torná-los facilmente pesquisáveis. Ele mapeia os termos para os documentos que contêm esses termos, permitindo a recuperação mais rápida de documentos com base em identificadores específicos. Para fazer query de dados em seu Atlas cluster usando o Atlas Search, você precisa configurar um índice do Atlas Search .
Os índices de pesquisa podem ser criados em um único campo ou em vários campos de documentos. Os índices nesses campos podem ser criados com diferentes mecanismos que discutiremos.
Faça login no cluster Atlas e vá para a seção “Atlas Search” na tela.
Clique em “Create Search Index.”
Clique em “Next” e selecione o nome do índice e a coleção na qual deseja criar o índice de pesquisa.
A construção do índice começará e, após alguns minutos, você verá a tela abaixo:
Para criar e gerenciar índices do Atlas Search usando o Atlas CLI, seu cluster do Atlas deve executar o MongoDB 6.0+ ou 7.0+.
Você não pode usar o comando
mongosh
para criar e gerenciar índices do Atlas Search em clusters M0, M2 ou M5 Atlas. Você terá que atualizar para M10+ para usar este método. O índice será criado usando o comando abaixo:1 atlas clusters search indexes create --clusterName <clusterName> --file index.json
O arquivo index.json deve conter as seguintes informações:
1 { 2 "name": "testIndex01", 3 "database": "sample_mflix", 4 "collectionName": "movies", 5 "mappings": { 6 "dynamic": true 7 } 8 }
Isso lhe dará o seguinte resultado:
Index testIndex01 created.
Para criar um índice usando o aplicativo Spring Boot, você terá que usar o exemplo de código abaixo:
1 try (MongoClient mongoClient = MongoClients.create(uri)) { 2 MongoDatabase database = mongoClient.getDatabase("sample_mflix"); 3 MongoCollection<Document> collection = database.getCollection("movies"); 4 SearchIndexModel indexOne = new SearchIndexModel("indexOne", 5 new Document("mappings", 6 new Document("dynamic", true))); 7 collection.createSearchIndexes(Collections.singletonList(indexOne));
Conforme mencionado na primeira etapa para criar o índice, selecione o Editor Visual e selecione o nome do banco de dados e da collection como sample_mflix e filmes respectivamente.
Após selecioná-lo, clique em "Next " e, em seguida, na aba "Refine Your Index ". Clique em "Add Field Mapping " e você verá a tela abaixo aparecendo:
Selecione o nome do campo e o tipo de dados com os quais você gostaria de reconhecer o nome do campo. Por exemplo, a captura de tela abaixo representa o mapeamento de campo adicionado aos campos de gêneros eanos .
Clique em "Save Changes " e a criação do índice será iniciada.
Atualize o arquivo index.json como:
1 { 2 "name": "testIndex02", 3 "database": "sample_mflix", 4 "collectionName": "movies", 5 "mappings": { 6 "dynamic": true, 7 "fields": { 8 "genre": [ 9 { 10 "type": "string" 11 }, 12 { 13 "type": "stringFacet" 14 } 15 ], 16 "year": [ 17 { 18 "type": "numberFacet" 19 }, 20 { 21 "type": "number" 22 } 23 ] 24 } 25 } 26 }
Agora, para criar o índice, use o mesmo comando mencionado no Caso 1 acima.
Se você deseja criar o índice acima usando o aplicativo Spring Boot, você pode tentar usar o código abaixo:
1 try (MongoClient mongoClient = MongoClients.create(uri)) { 2 MongoDatabase database = mongoClient.getDatabase("sample_mflix"); 3 MongoCollection<Document> collection = database.getCollection("movies"); 4 SearchIndexModel indexTwo = new SearchIndexModel("testIndex02", 5 new Document("mappings", 6 new Document("dynamic", true).append("fields", new Document().append("genres", Arrays.asList( 7 new Document().append("type", "stringFacet"), 8 new Document().append("type", "string"))) 9 .append("year",Arrays.asList( 10 new Document().append("type", "numberFacet"), 11 new Document().append("type", "number")))))); 12 collection.createSearchIndexes(Collections.singletonList(indexTwo)); 13 }
O recurso de preenchimento automático do Atlas Search permite que você envie palavras e frases incompletas. Os campos que você pretende consultar com o operador autocomplete devem ser indexados com o tipo de dados autocomplete na definição de índice da collection. Para saber mais sobre o recurso, você pode seguir a documentação do preenchimento automático no Atlas Search.
Depois de seguir as mesmas etapas para criar o mapeamento de campo com o tipo de dados como autocomplete para fullplot, especifique os detalhes conforme abaixo e crie o índice.
Para criar o mesmo índice com Atlas CLI, atualize o arquivo index.json como:
1 { 2 "name": "testIndex03", 3 "database": "sample_mflix", 4 "collectionName": "movies", 5 "mappings": { 6 "dynamic": true, 7 "fields": { 8 "fullplot": { 9 "foldDiacritics": false, 10 "maxGrams": 7, 11 "minGrams": 3, 12 "tokenization": "nGram", 13 "type": "autocomplete" 14 } 15 } 16 } 17 }
Conforme mencionado na captura de tela acima, para definir a tokenização depreenchimento automático para o Atlas Search, você precisará ver determinados parâmetros para criar os tokens.
Por exemplo, no JSON acima, o foldDiacritics definido como false retorna apenas resultados que correspondem às cadeias de caracteres com ou sem diacríticos na consulta. Por exemplo, uma pesquisa por cafè retorna resultados somente com os caracteres da palavra cafè.
Os maxGrams e minGrams são atributos para tokenizadoresnGram que determinam o número de caracteres a serem incluídos nos tokens mais longos e mais curtos criados respectivamente.
Use o mesmo comando acima para criar o índice.
Use o trecho de código abaixo para criar o mesmo índice programaticamente no Spring.
1 try (MongoClient mongoClient = MongoClients.create(uri)) { 2 MongoDatabase database = mongoClient.getDatabase("sample_mflix"); 3 MongoCollection<Document> collection = database.getCollection("movies"); 4 SearchIndexModel indexThree = new SearchIndexModel("testIndex03", 5 new Document("mappings", 6 new Document("dynamic",false).append("fields", 7 new Document().append("fullplot", 8 Arrays.asList(new Document().append("type", "stringFacet"), 9 new Document().append("type", "string"), 10 new Document().append("type", "autocomplete") 11 .append("tokenization", "nGram") 12 .append("minGrams", 3) 13 .append("maxGrams", 7) 14 .append("foldDiacritics", false))) 15 .append("title", new Document().append("type", "string"))))); 16 collection.createSearchIndexes(Collections.singletonList(indexThree)); 17 }
O Atlas Search permite criar analisadores para controlar como ele transforma o conteúdo de um campo de string em termos pesquisáveis.
Os métodos abaixo ajudarão você a entender como criar índices para usar esses analisadores.
Siga as mesmas etapas que você seguiu nos casos acima. A captura de tela abaixo ajudará você a entender como adicionar analisadores usando a UI.
Uma vez feito isso, crie o índice.
Atualize o index.json conforme abaixo:
1 { 2 "name": "testIndex04", 3 "database": "sample_mflix", 4 "collectionName": "movies", 5 "analyzer": "lucene.english", 6 "searchAnalyzer": "lucene.english", 7 "mappings": { 8 "dynamic": true, 9 "fields": { 10 "fullplot": { 11 "type": "string" 12 } 13 } 14 }, 15 "synonyms": [ 16 { 17 "analyzer": "lucene.english", 18 "name": "synonymName", 19 "source": { 20 "collection": "test_synonyms" 21 } 22 } 23 ] 24 }
E depois, use o mesmo comando para criar o índice.
1 atlas clusters search indexes create --clusterName <clusterName> --file index.json
Para criar o índice acima, use o código abaixo em seu aplicativo Spring.
1 try (MongoClient mongoClient = MongoClients.create(uri)) { 2 MongoDatabase database = mongoClient.getDatabase("sample_mflix"); 3 MongoCollection<Document> collection = database.getCollection("movies"); 4 SearchIndexModel indexFlour = new SearchIndexModel("testIndex04", 5 new Document("mappings", new Document() 6 .append("dynamic", true) 7 .append("fields", new Document() 8 .append("fullplot", new Document() 9 .append("analyzer", "lucene.english") 10 .append("type", "string")))) 11 .append("synonyms", List.of(new Document() 12 .append("analyzer", "lucene.english") 13 .append("name", "synonymName") 14 .append("source", new Document() 15 .append("collection", "test_synonyms"))))); 16 collection.createSearchIndexes(Collections.singletonList(indexThree)); 17 }
Depois que os índices forem criados e você desejar soltá-los, certifique-se de soltá-los usando um dos seguintes métodos:
Usando a UI: Clique no índice na UI e selecione "Delete Index " na lista.
Usando Atlas CLI: Siga as etapas abaixo para criar todos os índices e IDs de índice e use o comando para excluir o índice.
1 atlas clusters search indexes list --clusterName <clusterName> --db sample_mflix --collection movies 2 atlas clusters search indexes delete <index ID> --clusterName <clusterName>
Usando o aplicativo Spring Boot: Use o comando abaixo para excluir todos os índices criados.
1 collection.dropSearchIndex("<indexName>");
A criação de índices do Atlas Search usando a UI do Atlas , CLI e aplicativo Spring Boot fornece uma compreensão abrangente de como aproveitar os poderosos recursos do Atlas Search do MongoDB. A UI do Atlas oferece uma abordagem intuitiva e visual, perfeita para quem prefere uma interface gráfica. A CLI oferece mais recursos de controle e script, tornando-a ideal para automação e integração nos fluxos de trabalho de desenvolvimento. A integração da criação de índice do Atlas Search em um aplicativo Spring Boot mostra a integração perfeita do MongoDB Atlas com aplicativos baseados em Java, permitindo que os desenvolvedores criem funcionalidades robustas e escaláveis do Atlas Search.
Ao dominar esses métodos, você pode aprimorar seus aplicativos com recursos avançados de pesquisa, garantindo uma melhor experiência do usuário e um melhor desempenho na recuperação de dados. Seja você um desenvolvedor iniciante ou experiente, a combinação de UI, CLI e abordagens programáticas fornece um kit de ferramentas flexível e abrangente para gerenciar índices de pesquisa no MongoDB Atlas.
Se você tiver alguma dúvida ou precisar de mais assistência, entre em contato com os MongoDB Community e consulte a documentação oficial e os tutoriais daMongoDB University para obter informações e orientações mais detalhadas.
Feliz busca!
Principais comentários nos fóruns
Ainda não há comentários sobre este artigo.
{Parte de uma série