Commit 5e2c95f2 by nnnghia98

query by city/industry

parent b7e99753
...@@ -4,19 +4,22 @@ class JobsController < ApplicationController ...@@ -4,19 +4,22 @@ class JobsController < ApplicationController
def index def index
@search = params[:search] || ":" @search = params[:search] || ":"
@solr = SolrService.new
if params[:city_id] if params[:city_id]
@city = City.find(params[:city_id]) @city = City.find(params[:city_id])
@jobs = @city.jobs @city_name = @city.name
@jobs = @jobs.page(params[:page]).per(Settings.job.per_page).decorate @jobs = @solr.query_by_city(@city_name)["docs"]
@jobs_count = @solr.query_by_city(@city_name)["numFound"]
elsif params[:industry_id] elsif params[:industry_id]
@industry = Industry.find(params[:industry_id]) @industry = Industry.find(params[:industry_id])
@jobs = @industry.jobs @industry_name = @industry.name
@jobs = @jobs.page(params[:page]).per(Settings.job.per_page).decorate @jobs = @solr.query_by_industry(@industry_name)["docs"]
@jobs_count = @solr.query_by_industry(@industry_name)["numFound"]
else else
@jobs_count = SolrService.new.search(@search)["numFound"] @jobs = @solr.search(@search)["docs"]
@jobs = SolrService.new.search(@search)["docs"] @jobs_count = @solr.search(@search)["numFound"]
end end
@jobs = Kaminari.paginate_array(@jobs).page(params[:page]).per(Settings.job.per_page) @jobs = Kaminari.paginate_array(@jobs).page(params[:page]).per(Settings.job.per_page)
end end
......
module JobHelper
def view_jobs_count(count)
params[:city_id] ? count : (params[:industry_id] ? count : count)
end
def view_search_result
params[:city_id] ? "City: #{@city.name}" :
(params[:industry_id] ? "Industry: #{@industry.name}" : params[:search])
end
end
require "rsolr" require "rsolr"
require 'benchmark'
class SolrService class SolrService
def initialize def initialize
...@@ -11,7 +12,9 @@ class SolrService ...@@ -11,7 +12,9 @@ class SolrService
end end
def add_data def add_data
jobs = Job.includes(:cities, :industries, :company).all jobs = Job.includes(:cities, :industries, :company).all
jobs_solr_index = jobs.map do |job| jobs_solr_index = jobs.map do |job|
{ {
id: job.id, id: job.id,
...@@ -24,7 +27,15 @@ class SolrService ...@@ -24,7 +27,15 @@ class SolrService
city: job.cities&.first&.name, city: job.cities&.first&.name,
} }
end end
@solr.add jobs_solr_index
jobs_solr_index.each_slice(5000) do |job|
@solr.add job
rescue Exception
solr_index_error = ActiveSupport::Logger.new("log/solr_errors.log")
solr_index_error.info "This block got error!"
next
end
@solr.commit @solr.commit
end end
...@@ -34,11 +45,28 @@ class SolrService ...@@ -34,11 +45,28 @@ class SolrService
end end
def search(params) def search(params)
# city = @city.present? ? "city:\"#{escape_str(@city.name)}\"" : ""
# industry = @industry.present? ? "industry:\"#{escape_str(@industry.name)}\"" : ""
response = @solr.get "select", params: { response = @solr.get "select", params: {
q: "*#{params}*", q: "*#{params}*",
# fq: [industry, city], rows: Job.count
}
response["response"]
end
def query_by_city(city_name)
city = "city: #{escape_str(city_name)}"
response = @solr.get "select", params: {
q: "*:*",
fq: city,
rows: Job.count
}
response["response"]
end
def query_by_industry(industry_name)
industry = "industry: #{escape_str(industry_name)}"
response = @solr.get "select", params: {
q: "*:*",
fq: industry,
rows: Job.count rows: Job.count
} }
response["response"] response["response"]
......
...@@ -3,10 +3,8 @@ ...@@ -3,10 +3,8 @@
<%= submit_tag "Search", class: "btn btn-primary mb-2" %> <%= submit_tag "Search", class: "btn btn-primary mb-2" %>
<% end %> <% end %>
<h3>Total: <%= params[:city_id] ? @city.job_count : <h3>Total: <%= view_jobs_count(@jobs_count) %></h3>
(params[:industry_id] ? @industry.job_count : @jobs_count) %></h3> <h3>Result for: <%= view_search_result %></h3>
<h3>Result for: <%= params[:city_id] ? "City: #{@city.name}" :
(params[:industry_id] ? "Industry: #{@industry.name}" : params[:search]) %></h3>
<%= paginate @jobs %> <%= paginate @jobs %>
......
...@@ -2,7 +2,7 @@ job: ...@@ -2,7 +2,7 @@ job:
per_page: 20 per_page: 20
csv: csv:
file_path: "jobss.csv" file_path: "jobs.csv"
top: top:
city: city:
......
...@@ -13,20 +13,15 @@ namespace :solr do ...@@ -13,20 +13,15 @@ namespace :solr do
task solr_index: :environment do task solr_index: :environment do
SolrService.new.add_data SolrService.new.add_data
index = ActiveSupport::Logger.new("log/solr_service.log") solr_index_data = ActiveSupport::Logger.new("log/solr_service.log")
index.info "Solr index data succesfully at #{Time.current}" solr_index_data.info "Solr index data succesfully at #{Time.current}"
end end
desc "solr delete data" desc "solr delete data"
task solr_delete: :environment do task solr_delete: :environment do
SolrService.new.delete_data SolrService.new.delete_data
delete = ActiveSupport::Logger.new("log/solr_service.log") solr_delete_data = ActiveSupport::Logger.new("log/solr_service.log")
delete.info "Solr delete all data succesfully at #{Time.current}" solr_delete_data.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