Commit 5e9f7e2e by Xuan Trung Le

Add search feature use solr

parent 8d0f1d38
......@@ -68,6 +68,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
......@@ -14,6 +15,7 @@ class JobsController < ApplicationController
city = City.find(params[:city_id])
@jobs = city.jobs.includes(:company).page(params[:page])
@result = "jobs/City/#{city.name}"
@jobs_count = @jobs.count
render template: "jobs/job_lists"
end
......@@ -21,6 +23,7 @@ class JobsController < ApplicationController
industry = Industry.find(params[:industry_id])
@jobs = industry.jobs.includes(:company).page(params[:page])
@result = "jobs/Industry/#{industry.name}"
@jobs_count = @jobs.count
render template: "jobs/job_lists"
end
......@@ -28,10 +31,56 @@ class JobsController < ApplicationController
company = Company.find(params[:company_id])
@jobs = company.jobs.page(params[:page])
@result = "jobs/Company/#{company.name}"
@jobs_count = @jobs.count
render template: "jobs/job_lists"
end
def search
# byebug
condition = get_condition
response = query(condition)
job_id = response["response"]["docs"].pluck("id")
@jobs = Job.where(id: job_id).includes(:company).page(params[:page])
@result = params[:search]
@jobs_count = job_id.count
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>
<span> 1. Total: <%= @jobs_count %></span>
<span>Result for: <%= "#{@result}" %></span>
</p>
<div class="top-page">
<div class="top-page-info">
......
<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>
......@@ -24,6 +24,7 @@ Rails.application.routes.draw 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 'search' => "jobs#search"
end
end
resources :applies 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