Commit 5cb0d3a0 by nnnghia98

query by city/industry

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