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 .

Saiba por que o MongoDB foi selecionado como um líder no 2024 Gartner_Magic Quadrupnt()
Desenvolvedor do MongoDB
Centro de desenvolvedores do MongoDB
chevron-right
Idiomas
chevron-right
Ruby
chevron-right

Integração do Atlas Search em uma Aplicação Ruby on Rails

Humberto Diaz5 min read • Published Jun 12, 2024 • Updated Aug 12, 2024
Ruby
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
No artigo "Introdução ao MongoDB Atlas e Ruby on Rails", Luce Carter nos mostra como integrar o MongoDB Atlas em um aplicativo Ruby on Rails chamado Inpiration. Os usuários podem capturar e organizar suas ideias criadoras, graças à integração do MongoDB Atlas. Neste artigo, vamos construir sobre a base apresentada no artigo de Luce e fazer uma análise mais detalhada à medida que integramos a pesquisa de texto diretamente em nosso aplicativo Rails. Ao final deste artigo, você terá um recurso de pesquisa totalmente funcional embutido em seu aplicativo Rails, permitindo que os usuários encontrem com eficiência as ideias de que precisam.

Pré-requisitos

Antes de começar, você precisará concluir o seguinte:
  1. Bifurque e clone uma cópia do aplicativo Inspiration disponível no GitHub.
  2. Crie um cluster do MongoDB Atlas.
  3. Atualize a seção de configuração de desenvolvimento dentro config/mongoid.yml e adicione sua própria connection string.
  4. Certifique-se de ter dados armazenados em seu MongoDB Atlas cluster que você possa consultar no Atlas Search. Isso deve incluir as ideias que você adicionou ao seu aplicativo Inspiração.
  5. Usando a interface do usuário do Atlas, crie um índice do Atlas Search chamado inspiração. Um guia passo a passo sobre como criar um índice do Atlas Search pode ser encontrado na documentação do Atlas.

Configure o método de pesquisa em seu modelo

Agora que temos nosso ambiente configurado corretamente e nosso índice de expiração criado, podemos atualizar nosso modelo para lidar com as queries em nosso banco de dados de dados. Fazemos isso definindo um método de pesquisa em nosso modelo de ideias. O método self.search(query): define um método de classe chamado search que usa um único argumento e retorna os resultados.
  • Abra seu arquivoidea.rb
  • Substitua seu conteúdo pelo conteúdo abaixo:
1class Idea
2 include Mongoid::Document
3 include Mongoid::Timestamps
4 field :name, type: String
5 field :description, type: String
6 field :picture, type: String
7
8def self.search(query)
9 aggregation_pipeline = [
10 {
11 "$search": {
12 "index": "inspiration",
13 "text": {
14 "query": query,
15 "path": ['name', 'description']
16 },
17 "sort": {
18 "score": {"$meta": "searchScore"}
19 }
20 }
21 },
22 {
23 "$limit": 20
24 }
25 ]
26 results = collection.aggregate(aggregation_pipeline)
27
28 search_results = results.to_a
29 search_results.map do |result|
30 Idea.new(
31 id: result["_id"],
32 name: result["name"],
33 description: result["description"],
34 picture: result["picture"]
35 )
36 end
37 end
38end
Quando você chama idea.search("example query"), o Mongoid constrói e executa uma consulta MongoDB que:
  1. Executa uma Full Text Search usando Atlas Search no índice de expiração.
  2. Executa uma query nos campos de nome e descrição.
  3. Classifica os resultados por sua pontuação de relevância.
  4. Limita os resultados a 20. Usar um limite é uma boa prática para evitar problemas de desempenho se sua coleção contiver milhões de documentos.
A variávelsearch_results então converte os resultados brutos do MongoDB em uma array de hashes que podem ser mapeados para novas instâncias do Ideal e renderizados em nossos arquivos de visualização.
1search_results.map do |result|
2 Idea.new(
3 id: result["_id"],
4 name: result["name"],
5 description: result["description"],
6 picture: result["picture"]
7 )
8end

Adicionar uma ação de pesquisa no nosso IdealsController

Agora que definimos nossa consulta de pesquisa em nosso modelo de ideias, precisamos de uma maneira de iniciar essa pesquisa. Fazemos isso adicionando uma ação de pesquisa em nosso IdealsController. Adicione o seguinte código ao seu IdeasController:
1def search
2 @query = params[:query]
3 @ideas = @query.present? ? Idea.search(@query) : Idea.all
4 render :display_results
5 end
Com essa configuração, quando você enviar uma query de pesquisa , ela chamará o método de pesquisa no modelo deideia para realizar a pesquisa. Os resultados serão então renderizados em nossos arquivos de visualização.

Gerando nosso controlador de pesquisa

Criaremos um SearchesController separado para lidar com as solicitações de pesquisa e exibir os resultados da pesquisa.
Execute o seguinte comando para gerar o SearchesController e o arquivo de visualização string_results.
1rails generate controller Searches display_results
Abra seu arquivosearches controller.rbe adicione o seguinte código.
1class SearchesController < ApplicationController
2 def display_results
3 query = params[:query]
4 @results = Idea.search(query)
5 end
6end
Abra o arquivo display_results.html.erb e adicione o seguinte, que retornará nossos resultados de pesquisa.
1<div class="search-results">
2 <h1>Search Results for "<%= params[:query] %>"</h1>
3
4 <% if @results.empty? %>
5 <p>No ideas found.</p>
6 <% else %>
7 <div class="idea-container">
8 <% @results.each do |result| %>
9 <div class="idea">
10 <h2><%= result.name %></h2>
11 <p><%= truncate(result.description, length: 150) %></p>
12 <img src="<%= result.picture %>" alt="<%= result.name %>" />
13
14 <p><%= link_to "View", idea_path(result.id) %></p>
15 </div>
16 <% end %>
17 </div>
18 <% end %>
19</div>
20
21<%= link_to "Back", ideas_path %>
Em seu arquivoapplication.css, adicione o seguinte para criar um estilo básico para seus resultados de pesquisa:
1.search-results {
2 /* Add styles for the search results container */
3 width: 80%;
4 margin: 0 auto;
5 }
6 .idea-container {
7 display: flex;
8 flex-direction: column;
9 }
10 .idea {
11 padding: 20px;
12 border-bottom: 2px solid #ccc;
13 border-radius: 10px 10px 0 0;
14 margin-bottom: 10px;
15 }
16 .idea h2 {
17 margin: 0;
18 }
19 .idea p {
20 margin: 0;
21 }
22 .idea img {
23 width: 100px; /* Adjust the width of the image */
24 height: auto; /* Maintain aspect ratio */
25 display: block; /* Ensure the image takes up full width */
26 }
27 /* Remove bullet points */
28 ul {
29 list-style-type: none;
30 padding: 0;
31 }
Com essa configuração, quando você enviar uma consulta de pesquisa, ela será encaminhada para SearchesController, que chamará o método de pesquisa no modelo Ideapara realizar a pesquisa. Os resultados serão então exibidos na visualizaçãodisplay_results.

Criando o formulário de pesquisa

Agora, só precisamos criar uma interface de usuário simples para que os usuários possam enviar queries diretamente em nosso aplicativo Rails.
  • Abra seu index.html.erb.
  • Copie e cole o código abaixo para adicionar um formulário de pesquisa e um espaço reservado para os resultados da pesquisa.
1<%= form_tag(search_results_path, method: :get, class: "form-inline") do %>
2 <div class="input-group mb-3">
3 <%= text_field_tag :query, params[:query], placeholder: "Search Ideas...", class: "form-control" %>
4 <div class="input-group-append">
5 <%= submit_tag "Search", class: "btn btn-primary text-white" %>
6 </div>
7 </div>
8 <% end %>
  • Adicione o seguinte estilo para a barra de pesquisa no seu application.css arquivo:
1.input-group {
2 width: 100%;
3}
4
5.btn-primary {
6 background-color: #007bff;
7 border-color: #007bff;
8 color: white;
9}
10
11.btn-primary:hover {
12 background-color: #0056b3;
13 border-color: #004085;
14}

Atualizando nossas rotas para incluir nossos resultados de pesquisa

Para redirecionar usuários para o arquivo de visualização exibe_resultados, precisamos atualizar nosso concerns.rb.
Adicione a seguinte solicitação get ao seu arquivo de rotas:
1Rails.application.routes.draw do
2 root to: "ideas#index"
3
4 resources :ideas
5 get '/search_results', to: 'searches#display_results', as: "search_results"
6end

Executando nosso servidor local

É hora de testar nosso aplicativo. Comece executando o seguinte comando no diretório do seu projeto:
1rails server
Navegue até a Porta: 3000 e agora você poderá ver uma barra de pesquisa aparecer na página da web.
Páginas de índice listando todas as ideias em nosso aplicativo

Enviar uma query no aplicativo

Para enviar uma pesquisa, adicione seu termo de query na barra de pesquisa e clique em "Search. "
Aqui estão os resultados de uma pesquisa no meu MongoDB database para a palavra "pet ": Uma lista de ideias é exibida correspondendo ao termo de pesquisa "pet".
Observe que os resultados da pesquisa dependem do conteúdo do seu próprio banco de dados. Portanto, verifique se o seu banco de dados tem os dados que você está solicitando. No entanto, à medida que a complexidade de seus dados aumenta, a necessidade de consultas de pesquisa mais avançadas pode ser necessária.Consulte adocumentaçãodo MongoDB para obter informações sobre essas queries.

Resumo

E, com isso, agora temos um recurso de pesquisa totalmente funcional integrado em nosso aplicativo Rails. Essa integração não apenas melhora a usabilidade e a funcionalidade do nosso aplicativo, mas também pode ajudar a melhorar o engajamento do usuário. Nosso aplicativo Rails agora oferece uma ferramenta poderosa para os usuários encontrarem e gerenciarem suas ideias criadoras de forma eficaz. Certifique-se de explorar mais sobre o MongoDB Atlas e Rails nos fóruns da comunidade, compartilhar suas experiências ou fazer quaisquer perguntas que você possa ter!

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

ORMs, ODMs e bibliotecas do MongoDB


Aug 28, 2024 | 3 min read
Notícias e Anúncios

Um plano para MongoDB e JRuby


Jun 23, 2022 | 2 min read
Início rápido

Construindo aplicativos Rails com o modelo MongoDB


Aug 26, 2024 | 4 min read
Artigo

TableCheck: restaurantes habilitados com as melhores ferramentas de reserva da classe, desenvolvido pela MongoDB


Aug 28, 2024 | 4 min read
Sumário