Commit ee7d2c4f by Ba Toi Dang

Merge branch 'features/create_search_form' into 'master'

Add search feature use solr

See merge request !11
parents b94adaf7 d82c2c39
......@@ -72,6 +72,13 @@ body{
.search-box{
width: 100%;
height: 50px;
margin-bottom: 20px;
.navbar-form{
padding: 0px !important;
}
input{
height: 45px;
}
}// end
// City list
......
......@@ -4,6 +4,7 @@ class JobsController < ApplicationController
@jobs = Job.top_list.includes(:company)
@cities = City.top_cities.includes(:country)
@industries = Industry.top_industries
@jobs_count = @jobs.count
end
def show
......@@ -13,26 +14,77 @@ class JobsController < ApplicationController
def city
city = City.find(params[:city_id])
@jobs = city.jobs.includes(:company).page(params[:page])
@jobs = city.jobs.includes(:company)
@jobs_count = @jobs.count
@jobs = @jobs.page(params[:page])
@result = "jobs/City/#{city.name}"
render template: "jobs/job_lists"
end
def industry
industry = Industry.find(params[:industry_id])
@jobs = industry.jobs.includes(:company).page(params[:page])
@jobs = industry.jobs.includes(:company)
@jobs_count = @jobs.count
@jobs = @jobs.page(params[:page])
@result = "jobs/Industry/#{industry.name}"
render template: "jobs/job_lists"
end
def company
company = Company.find(params[:company_id])
@jobs = company.jobs.page(params[:page])
@jobs = company.jobs
@jobs_count = @jobs.count
@jobs = @jobs.page(params[:page])
@result = "jobs/Company/#{company.name}"
render template: "jobs/job_lists"
end
def search
# byebug
condition = get_condition
response = query(condition)
job_ids = response["response"]["docs"].pluck("id")
@jobs = Job.where(id: job_ids).includes(:company).page(params[:page])
@jobs_count = job_ids.count
@result = params[:search]
render template: "jobs/job_lists"
end
private
def set_job
@job = Job.find(params[:id])
end
def connect
url = 'http://localhost:8983/solr/my_solr_collection'
@solr = RSolr.connect url: url
end
def query(condition)
# Direct connection
connect
# use get method to query
response = @solr.get 'select', :params => condition
response
end
def get_condition
condition = {}
filter_query = []
# get condition
condition[:q] = "*:*"
condition[:fl] = "id"
condition[:start] = 0
condition[:rows] = Job.count
unless params[:search].blank?
filter_query << "name:\"#{params[:search]}\" ||
company_name:\"#{params[:search]}\" ||
city_name:\"#{params[:search]}\" ||
industry:\"#{params[:search]}\""
condition[:fq] = filter_query
end
condition
end
end
......@@ -3,6 +3,7 @@
<div class="container">
<div class="top-page">
<!-- Search -->
<%= render "layouts/search_box" %>
<div class="panel border_bot clearfix">
<%= render @jobs %>
</div>
......
<div class="row">
<div class="container">
<p>
THIS IS A SEARCH BOX
</p>
<%= render "layouts/search_box" %>
<div class="job-list">
<p>
<span>1. Total: <%= "#{@jobs.count}" %></span>
<span>Result for: <%= "#{@result}" %></span>
</p>
<div class="alert alert-success" role="alert">
<p>
<span>Total: <%= @jobs_count %></span>
<span>Result for: <%= "#{@result}" %></span>
</p>
</div>
<div class="top-page">
<div class="top-page-info">
</div>
</div>
<div class="pagination">
<div class="pagination navbar-right">
<%= paginate @jobs %>
</div>
<div class="jobs clearfix">
......@@ -35,7 +35,7 @@
</div>
<%- end -%>
</div>
<div class="pagination">
<div class="pagination navbar-right">
<%= paginate @jobs %>
</div>
</div>
......
<div class="search-box">
<%= form_tag nil, method: :get, class: "navbar-form navbar-left search-form wid100" do %>
<%= form_tag search_jobs_path, method: :get, class: "navbar-form navbar-left search-form wid100" do %>
<%= text_field_tag(
:search,
params[:search],
placeholder: "Search",
class: "form-control wid80"
class: "form-control wid100"
) %>
<%= submit_tag "Search", class: "btn btn-default"%>
<% end %>
</div>
......@@ -23,9 +23,10 @@ Rails.application.routes.draw do
end
resources :jobs do
collection do
get 'city/:city_id' => 'jobs#city', as: :city
get 'industry/:industry_id' => 'jobs#industry', as: :industry
get 'company/:company_id' => 'jobs#company', as: :company
get 'city/:city_id' => "jobs#city", as: :city
get 'industry/:industry_id' => "jobs#industry", as: :industry
get 'company/:company_id' => "jobs#company", as: :company
get 'search' => "jobs#search"
end
end
resources :my_pages, path: '', only: [:index] do
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment