Commit 39a69b3a by Xuan Trung Le

Add search feature use solr

parent b94adaf7
...@@ -72,6 +72,13 @@ body{ ...@@ -72,6 +72,13 @@ body{
.search-box{ .search-box{
width: 100%; width: 100%;
height: 50px; height: 50px;
margin-bottom: 20px;
.navbar-form{
padding: 0px !important;
}
input{
height: 45px;
}
}// end }// end
// City list // City list
......
...@@ -4,6 +4,7 @@ class JobsController < ApplicationController ...@@ -4,6 +4,7 @@ class JobsController < ApplicationController
@jobs = Job.top_list.includes(:company) @jobs = Job.top_list.includes(:company)
@cities = City.top_cities.includes(:country) @cities = City.top_cities.includes(:country)
@industries = Industry.top_industries @industries = Industry.top_industries
@jobs_count = @jobs.count
end end
def show def show
...@@ -15,6 +16,7 @@ class JobsController < ApplicationController ...@@ -15,6 +16,7 @@ class JobsController < ApplicationController
city = City.find(params[:city_id]) city = City.find(params[:city_id])
@jobs = city.jobs.includes(:company).page(params[:page]) @jobs = city.jobs.includes(:company).page(params[:page])
@result = "jobs/City/#{city.name}" @result = "jobs/City/#{city.name}"
@jobs_count = @jobs.count
render template: "jobs/job_lists" render template: "jobs/job_lists"
end end
...@@ -22,6 +24,7 @@ class JobsController < ApplicationController ...@@ -22,6 +24,7 @@ class JobsController < ApplicationController
industry = Industry.find(params[:industry_id]) industry = Industry.find(params[:industry_id])
@jobs = industry.jobs.includes(:company).page(params[:page]) @jobs = industry.jobs.includes(:company).page(params[:page])
@result = "jobs/Industry/#{industry.name}" @result = "jobs/Industry/#{industry.name}"
@jobs_count = @jobs.count
render template: "jobs/job_lists" render template: "jobs/job_lists"
end end
...@@ -29,10 +32,56 @@ class JobsController < ApplicationController ...@@ -29,10 +32,56 @@ class JobsController < ApplicationController
company = Company.find(params[:company_id]) company = Company.find(params[:company_id])
@jobs = company.jobs.page(params[:page]) @jobs = company.jobs.page(params[:page])
@result = "jobs/Company/#{company.name}" @result = "jobs/Company/#{company.name}"
@jobs_count = @jobs.count
render template: "jobs/job_lists" render template: "jobs/job_lists"
end 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 def set_job
@job = Job.find(params[:id]) @job = Job.find(params[:id])
end 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 end
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
<div class="container"> <div class="container">
<div class="top-page"> <div class="top-page">
<!-- Search --> <!-- Search -->
<%= render "layouts/search_box" %>
<div class="panel border_bot clearfix"> <div class="panel border_bot clearfix">
<%= render @jobs %> <%= render @jobs %>
</div> </div>
......
<div class="row"> <div class="row">
<div class="container"> <div class="container">
<p> <%= render "layouts/search_box" %>
THIS IS A SEARCH BOX
</p>
<div class="job-list"> <div class="job-list">
<p> <p>
<span>1. Total: <%= "#{@jobs.count}" %></span> <span> 1. Total: <%= @jobs_count %></span>
<span>Result for: <%= "#{@result}" %></span> <span>Result for: <%= "#{@result}" %></span>
</p> </p>
<div class="top-page"> <div class="top-page">
......
<div class="search-box"> <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( <%= text_field_tag(
:search, :search,
params[:search], params[:search],
placeholder: "Search", placeholder: "Search",
class: "form-control wid80" class: "form-control wid100"
) %> ) %>
<%= submit_tag "Search", class: "btn btn-default"%>
<% end %> <% end %>
</div> </div>
...@@ -23,9 +23,10 @@ Rails.application.routes.draw do ...@@ -23,9 +23,10 @@ Rails.application.routes.draw do
end end
resources :jobs do resources :jobs do
collection do collection do
get 'city/:city_id' => 'jobs#city', as: :city get 'city/:city_id' => "jobs#city", as: :city
get 'industry/:industry_id' => 'jobs#industry', as: :industry get 'industry/:industry_id' => "jobs#industry", as: :industry
get 'company/:company_id' => 'jobs#company', as: :company get 'company/:company_id' => "jobs#company", as: :company
get 'search' => "jobs#search"
end end
end end
resources :my_pages, path: '', only: [:index] do 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