Visão geral
Neste tutorial, você pode aprender como integrar o Atlas Search, um recurso avançado de pesquisa de texto completo, em um aplicativo Ruby on Rails.
Depois de concluir este tutorial, você terá um recurso de pesquisa totalmente funcional incorporado ao seu aplicativo Rails. Esse recurso permitirá que você encontre informações com eficiência.
Pré-requisitos
O tutorial baseia-se em um aplicativo modelo que você pode baixar no repositório GitHub mongodb-atlas-with-ruby-on-rails-example executando o seguinte comando:
git clone https://github.com/mongodb-developer/mongodb-atlas-with-ruby-on-rails-example.git 
Em seguida, execute as seguintes ações de configuração:
- Crie um cluster do MongoDB Atlas. Para aprender como criar um cluster, consulte a etapa Criar uma implantação do MongoDB – Ruby on Rails do guia de início rápido do Rails. 
- Atualize o arquivo - config/mongoid.ymldo aplicativo com sua própria string de conexão e defina o banco de dados padrão como- inspiration, conforme mostrado no exemplo de configuração a seguir:- development: - clients: - default: - uri: mongodb+srv://<username>:<password>@<host>/inspiration 
- Inicie o aplicativo Rails executando o comando - rails server. Em seguida, preencha o formulário de entrada New Idea para inserir alguns dados de amostra na coleção- inspiration.ideas.- Dica- Dados de amostra- Para obter a funcionalidade de pesquisa demonstrada posteriormente no tutorial, insira exemplos de documentos que contenham alguns termos sobrepostos nos campos - nameou- description.
- Crie um índice do Atlas Search no Compass ou na IU do Atlas. O nome deve ser - inspiratione os mapeamentos dinâmicos devem estar habilitados (é o padrão). Para saber mais sobre como criar índices do Atlas Search, consulte a seção Índices do Atlas Search no guia sobre Índices.
Passos
Configure o recurso Atlas Search no seu modelo Mongoid.
Primeiro, atualize o modelo Idea para lidar com queries do Atlas Search na coleção ideas definindo o método search no modelo. O método self.search(query) define um método de classe chamado search que recebe um único argumento query e retorna os resultados da pesquisa.
Abra o arquivo app/models/idea.rb e substitua o conteúdo pelo seguinte código:
class Idea   include Mongoid::Document   include Mongoid::Timestamps   field :name, type: String   field :description, type: String   field :picture, type: String   def self.search(query)     aggregation_pipeline = [       {         "$search": {           "index": "inspiration",           "text": {             "query": query,             "path": ['name', 'description']           },           "sort": {             "score": { "$meta": "searchScore" }           }         }       },       {         "$limit": 20       }     ]     results = collection.aggregate(aggregation_pipeline)     search_results = results.to_a     search_results.map do |result|       Idea.new(         id: result["_id"],         name: result["name"],         description: result["description"],         picture: result["picture"]       )     end   end end 
Quando você chamar idea.search("<example query>"), o Mongoid executará as seguintes ações:
- Executa uma pesquisa de texto completo usando o índice - inspiration.
- Executa a consulta nos campos - namee- description.
- Classifica os resultados conforme as pontuações de relevância. 
- Limita o número de resultados a - 20para melhorar o desempenho das queries em grandes coleções.
A variável search_results converte os resultados brutos do MongoDB em uma array de hashes que podem ser mapeados para instâncias de modelo Idea e renderizados em seus arquivos de visualização.
Adicione uma ação de pesquisa ao seu controlador.
Agora que você definiu a funcionalidade de query de pesquisa no modelo Idea, é preciso adicionar uma ação para iniciar as queries.
Abra o arquivo app/controllers/ideas_controller.rb e adicione a seguinte ação ao seu IdeasController antes da declaração private:
def search   @query = params[:query]   @ideas = @query.present? ? Idea.search(@query) : Idea.all   render :display_results end 
Agora, ao enviar uma query de pesquisa, o Mongoid executa o método search no modelo Idea. Em seguida, os resultados são renderizados nos seus arquivos de exibição.
Gere o controller de pesquisa.
Execute o seguinte comando para gerar os arquivos de visualização SearchesController e display_results, que lidam com as solicitações search e exibem os resultados, respectivamente:
rails generate controller Searches display_results 
Abra o arquivo searches_controller.rb recém-criado e substitua o conteúdo pelo seguinte código:
class SearchesController < ApplicationController   def display_results     query = params[:query]     @results = Idea.search(query)   end end 
Abra o arquivo app/views/searches/display_results.html.erb e substitua o conteúdo pelo seguinte código, que renderiza os resultados da pesquisa:
<div class="search-results">   <h1>Search Results for "<%= params[:query] %>"</h1>   <% if @results.empty? %>     <p>No ideas found.</p>   <% else %>     <div class="idea-container">       <% @results.each do |result| %>         <div class="idea">           <h2><%= result.name %></h2>           <p><%= truncate(result.description, length: 150) %></p>           <img src="<%= result.picture %>" alt="<%= result.name %>" />           <p><%= link_to "View", idea_path(result.id) %></p>         </div>       <% end %>     </div>   <% end %> </div> <%= link_to "Back", ideas_path %> 
Em seguida, adicione o seguinte código ao seu arquivo app/assets/stylesheets/application.css para incluir o estilo básico para os resultados da pesquisa:
.search-results {   width: 80%;   margin: 0 auto; } .idea-container {   display: flex;   flex-direction: column; } .idea {   padding: 20px;   border-bottom: 2px solid #ccc;   border-radius: 10px 10px 0 0;   margin-bottom: 10px; } .idea h2 {   margin: 0; } .idea p {   margin: 0; } .idea img {   width: 100px;   height: auto;   display: block; } ul {   list-style-type: none;   padding: 0; } 
Crie o formulário de pesquisa.
Para habilitar queries de pesquisa diretamente no seu aplicativo, abra o arquivo app/views/ideas/index.html.erb e adicione o seguinte código:
<%= form_tag(search_results_path, method: :get, class: "form-inline") do %>   <div class="input-group mb-3">     <%= text_field_tag :query, params[:query], placeholder: "Search Ideas...", class: "form-control" %>     <div class="input-group-append">       <%= submit_tag "Search", class: "btn btn-primary text-white" %>     </div>   </div> <% end %> 
Adicione o seguinte estilo da barra de pesquisa ao seu arquivo application.css:
.input-group {   width: 100%; } .btn-primary {   background-color: #007bff;   border-color: #007bff;   color: white; } .btn-primary:hover {   background-color: #0056b3;   border-color: #004085; } 
Atualize rotas do aplicativo para queries de pesquisa.
Substitua a rota existente no arquivo config/routes.rb pela seguinte rota para exibir os resultados da pesquisa:
Rails.application.routes.draw do   root to: "ideas#index"   resources :ideas   get '/search_results', to: 'searches#display_results', as: "search_results" end 
Inicie seu aplicativo e execute queries de pesquisa.
No diretório do projeto, execute o seguinte comando para iniciar o aplicativo:
rails server 
Navegue para http://127.0.0.1:3000/ para visualizar a página de chegada.
Para enviar uma query, digite um termo ou frase na barra de pesquisa e clique no botão Search. A imagem a seguir mostra os resultados da pesquisa para o termo "outdoor":

Os resultados da pesquisa dependem dos documentos no seu banco de dados. À medida que a complexidade dos seus dados aumenta, pode ser necessário realizar consultas mais avançadas para restringir os resultados. Para saber mais sobre diferentes queries do Atlas Search e ver exemplos, consulte a Referência de query na documentação do Atlas.
Conclusão
Neste tutorial, você aprendeu como integrar o recurso Atlas Search a um aplicativo Rails. Essa integração melhora a usabilidade e a funcionalidade, ao mesmo tempo que aumenta o engajamento dos usuários.
Para aprender mais sobre como realizar queries no Mongoid, consulte os guias Interação com dados.