Commit fed36eef by nnnghia98

search form

parent 67778ac4
...@@ -3,17 +3,20 @@ class JobsController < ApplicationController ...@@ -3,17 +3,20 @@ class JobsController < ApplicationController
before_action :find_user, only: :apply_available before_action :find_user, only: :apply_available
def index def index
@search = params[:search] || "*:*"
if params[:city_id] if params[:city_id]
@city = City.find(params[:city_id]) @city = City.find(params[:city_id])
@jobs = @city.jobs @jobs = @city.jobs
@jobs = @jobs.page(params[:page]).per(Settings.job.per_page).decorate
elsif params[:industry_id] elsif params[:industry_id]
@industry = Industry.find(params[:industry_id]) @industry = Industry.find(params[:industry_id])
@jobs = @industry.jobs @jobs = @industry.jobs
@jobs = @jobs.page(params[:page]).per(Settings.job.per_page).decorate
else else
@jobs = Job.all @jobs = SolrService.new.search(@search)
end end
@jobs = @jobs.page(params[:page]).per(Settings.job.per_page).decorate @jobs = Kaminari.paginate_array(@jobs).page(params[:page]).per(Settings.job.per_page)
end end
def show def show
......
...@@ -3,10 +3,10 @@ require "rsolr" ...@@ -3,10 +3,10 @@ require "rsolr"
class SolrService class SolrService
def initialize def initialize
@solr = RSolr.connect( @solr = RSolr.connect(
:url => Settings.solr.connection.server_url, url: Settings.solr.connection.server_url,
:read_timeout => Settings.solr.connection.read_timeout, read_timeout: Settings.solr.connection.read_timeout,
:open_timeout => Settings.solr.connection.open_timeout, open_timeout: Settings.solr.connection.open_timeout,
:retry_503 => Settings.solr.connection.retry_503 retry_503: Settings.solr.connection.retry_503
) )
end end
...@@ -16,13 +16,12 @@ class SolrService ...@@ -16,13 +16,12 @@ class SolrService
{ {
id: job.id, id: job.id,
title: job.title, title: job.title,
category: job.category, industry: job.industries&.first&.name,
description: job.description, description: job.description,
short_des: job.short_des, short_des: job.short_des,
salary: job.salary, salary: job.salary,
company: job.company.name, company: job.company.name,
city: job.cities&.first&.name, city: job.cities&.first&.name,
industry: job.industries&.first&.name
} }
end end
@solr.add jobs_solr_index @solr.add jobs_solr_index
...@@ -30,14 +29,22 @@ class SolrService ...@@ -30,14 +29,22 @@ class SolrService
end end
def delete_data def delete_data
jobs = Job.includes(:cities, :industries, :company).all @solr.delete_by_query("*:*")
jobs_solr_delete = jobs.map do |job|
{
id: job.id
}
end
@solr.delete_by_id jobs_solr_delete
@solr.commit @solr.commit
end end
def search(params)
# city = @city.present? ? "city:\"#{escape_str(@city.name)}\"" : ""
# industry = @industry.present? ? "industry:\"#{escape_str(@industry.name)}\"" : ""
response = @solr.get "select", params: {
q: "#{params}",
# fq: [industry, city],
rows: Job.count
}
response["response"]["docs"]
end
def escape_str(str)
RSolr.solr_escape(str)
end
end end
...@@ -2,19 +2,19 @@ ...@@ -2,19 +2,19 @@
<div class="job_data"> <div class="job_data">
<dl class="job_data_row"> <dl class="job_data_row">
<dt>Title</dt> <dt>Title</dt>
<dd><%= link_to job.title, job_path(job.id) %></dd> <dd><%= link_to job["title"], job_path(job["id"]) %></dd>
</dl> </dl>
<dl class="job_data_row"> <dl class="job_data_row">
<dt>Short description</dt> <dt>Short description</dt>
<dd><%= job.display_short_des %></dd> <dd><%= job["short_des"]&.truncate(250) %></dd>
</dl> </dl>
<dl class="job_data_row"> <dl class="job_data_row">
<dt>Salary</dt> <dt>Salary</dt>
<dd><%= job.salary %></dd> <dd><%= job["salary"] %></dd>
</dl> </dl>
<dl class="job_data_row"> <dl class="job_data_row">
<dt>Location</dt> <dt>Location</dt>
<dd><%= job.city_name %></dd> <dd><%= job["city"] %></dd>
</dl> </dl>
</div> </div>
<button type="button" class="btn btn-outline-secondary">Favorite</button> <button type="button" class="btn btn-outline-secondary">Favorite</button>
......
<%= form_tag( jobs_path, method: :get, class: "form-inline") do %>
<%= search_field_tag :search, params[:search], class: "form-control mb-2 mr-sm-2" %>
<%= submit_tag "Search", class: "btn btn-primary mb-2" %>
<% end %>
<h3>Total: <%= params[:city_id] ? @city.job_count : <h3>Total: <%= params[:city_id] ? @city.job_count :
(params[:industry_id] ? @industry.job_count : Job.count) %></h3> (params[:industry_id] ? @industry.job_count : "Will be count on Solr") %></h3>
<h3>Result for: </h3> <h3>Result for: <%= params[:city_id] ? "City: #{@city.name}" :
(params[:industry_id] ? "Industry: #{@industry.name}" : params[:search]) %></h3>
<%= paginate @jobs %> <%= paginate @jobs %>
......
...@@ -22,6 +22,11 @@ namespace :solr do ...@@ -22,6 +22,11 @@ namespace :solr do
SolrService.new.delete_data SolrService.new.delete_data
delete = ActiveSupport::Logger.new("log/solr_service.log") delete = ActiveSupport::Logger.new("log/solr_service.log")
delete.info "Solr delete data succesfully at #{Time.current}" delete.info "Solr delete all data succesfully at #{Time.current}"
end
desc "solr search"
task solr_search: :environment do
SolrService.new.search(@search)
end end
end end
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