Commit fed36eef by nnnghia98

search form

parent 67778ac4
......@@ -3,17 +3,20 @@ class JobsController < ApplicationController
before_action :find_user, only: :apply_available
def index
@search = params[:search] || "*:*"
if params[:city_id]
@city = City.find(params[:city_id])
@jobs = @city.jobs
@jobs = @jobs.page(params[:page]).per(Settings.job.per_page).decorate
elsif params[:industry_id]
@industry = Industry.find(params[:industry_id])
@jobs = @industry.jobs
@jobs = @jobs.page(params[:page]).per(Settings.job.per_page).decorate
else
@jobs = Job.all
@jobs = SolrService.new.search(@search)
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
def show
......
......@@ -3,10 +3,10 @@ require "rsolr"
class SolrService
def initialize
@solr = RSolr.connect(
:url => Settings.solr.connection.server_url,
:read_timeout => Settings.solr.connection.read_timeout,
:open_timeout => Settings.solr.connection.open_timeout,
:retry_503 => Settings.solr.connection.retry_503
url: Settings.solr.connection.server_url,
read_timeout: Settings.solr.connection.read_timeout,
open_timeout: Settings.solr.connection.open_timeout,
retry_503: Settings.solr.connection.retry_503
)
end
......@@ -16,13 +16,12 @@ class SolrService
{
id: job.id,
title: job.title,
category: job.category,
industry: job.industries&.first&.name,
description: job.description,
short_des: job.short_des,
salary: job.salary,
company: job.company.name,
city: job.cities&.first&.name,
industry: job.industries&.first&.name
}
end
@solr.add jobs_solr_index
......@@ -30,14 +29,22 @@ class SolrService
end
def delete_data
jobs = Job.includes(:cities, :industries, :company).all
jobs_solr_delete = jobs.map do |job|
{
id: job.id
@solr.delete_by_query("*:*")
@solr.commit
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
@solr.delete_by_id jobs_solr_delete
@solr.commit
def escape_str(str)
RSolr.solr_escape(str)
end
end
......@@ -2,19 +2,19 @@
<div class="job_data">
<dl class="job_data_row">
<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 class="job_data_row">
<dt>Short description</dt>
<dd><%= job.display_short_des %></dd>
<dd><%= job["short_des"]&.truncate(250) %></dd>
</dl>
<dl class="job_data_row">
<dt>Salary</dt>
<dd><%= job.salary %></dd>
<dd><%= job["salary"] %></dd>
</dl>
<dl class="job_data_row">
<dt>Location</dt>
<dd><%= job.city_name %></dd>
<dd><%= job["city"] %></dd>
</dl>
</div>
<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 :
(params[:industry_id] ? @industry.job_count : Job.count) %></h3>
<h3>Result for: </h3>
(params[:industry_id] ? @industry.job_count : "Will be count on Solr") %></h3>
<h3>Result for: <%= params[:city_id] ? "City: #{@city.name}" :
(params[:industry_id] ? "Industry: #{@industry.name}" : params[:search]) %></h3>
<%= paginate @jobs %>
......
......@@ -22,6 +22,11 @@ namespace :solr do
SolrService.new.delete_data
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
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