Menu Docs
Página inicial do Docs
/ /

Integrar o Atlas Search

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.

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:

  1. 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.

  2. Atualize o arquivo config/mongoid.yml do 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
  3. 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 name ou description.

  4. Crie um índice do Atlas Search no Compass ou na IU do Atlas. O nome deve ser inspiration e 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.

1

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:

  1. Executa uma pesquisa de texto completo usando o índice inspiration.

  2. Executa a consulta nos campos name e description.

  3. Classifica os resultados conforme as pontuações de relevância.

  4. Limita o número de resultados a 20 para 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.

2

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.

3

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;
}
4

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;
}
5

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
6

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 de pesquisa renderizados

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.

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.

Voltar

Atributos aninhados

Nesta página