create class Solrsearch

parent 488000a4
Pipeline #1491 failed with stages
in 0 seconds
...@@ -23,15 +23,9 @@ class JobsController < ApplicationController ...@@ -23,15 +23,9 @@ class JobsController < ApplicationController
def search def search
@keyword = job_params[:search].gsub!(/[^[:alnum:]]/, ' ') @keyword = job_params[:search].gsub!(/[^[:alnum:]]/, ' ')
solr = RSolr.connect url: 'http://localhost:8983/solr/VeNJOB' search_param = SolrSearch.new.search(@keyword)
response = solr.get 'select', params: { @result_search = Kaminari.paginate_array(search_param).page(params[:page])
q: "city: #{@keyword}* or title: #{@keyword}* or industry: #{@keyword}* or company: #{@keyword}*", @total = search_param.count
start: 0,
rows: 2_147_483_647
}
result = response['response']['docs']
@result_search = Kaminari.paginate_array(result).page(params[:page])
@total = result.count
end end
private private
......
...@@ -30,6 +30,6 @@ module ApplicationHelper ...@@ -30,6 +30,6 @@ module ApplicationHelper
end end
def search(input) def search(input)
Job.find_by(id: input['id']) Job.find_by(id: input['job_id'])
end end
end end
...@@ -17,6 +17,7 @@ module VeNJOB ...@@ -17,6 +17,7 @@ module VeNJOB
# in config/environments, which are processed later. # in config/environments, which are processed later.
# #
config.time_zone = 'Hanoi' config.time_zone = 'Hanoi'
config.eager_load_paths << "#{Rails.root}/lib/solr"
# config.eager_load_paths << Rails.root.join("extras") # config.eager_load_paths << Rails.root.join("extras")
end end
end end
class SolrSearch
def initialize
@solr = RSolr.connect url: 'http://localhost:8983/solr/VeNJOB'
end
def search(keyword)
response = @solr.get 'select', params: {
q: "cities_name: #{keyword}* or title: #{keyword}* or industries_name: #{keyword}* or company_name: #{keyword}*",
fl: %w[job_id slug],
start: 0,
rows: 2_147_483_647
}
response['response']['docs']
end
def add_data
logger = Logger.new("#{Rails.root}/log/add_data_solr.log")
logger.info "Start add data at: #{Time.current}"
data = Job.all.includes(:cities, :industries, :company)
data.each do |record|
job_id = record.id
title = record.title
company_name = record.company.name
cities = record.cities.uniq.map(&:name)
industries = record.industries.uniq.map(&:name)
slug = record.slug
@solr.add(job_id: job_id, title: title, company_name: company_name, cities_name: cities,
industries_name: industries, slug: slug)
@solr.commit
rescue StandardError => error
logger.error "The job has error: #{job_id}"
logger.error error
next
end
logger.info "End add data at: #{Time.current}"
end
def delete_data
@solr.delete_by_query '*:*'
@solr.commit
end
end
namespace :solr do namespace :solr do
desc "Add data into apache solr" desc 'Add data into apache solr'
task setup: :environment do task setup: :environment do
data = Job.all.includes(:cities, :industries, :company) connect_solr.add_data
solr = RSolr.connect url: 'http://localhost:8983/solr/VeNJOB' end
data.each do |record|
id = record.id
title = record.title
salary = record.salary
overview = record.overview
company = record.company.name
experience = record.experience
job_type = record.job_type
level = record.level
slug = record.slug
job_cities = [] desc 'Delete data in apache solr'
cities = record.cities.uniq task delete_data: :environment do
cities.each do |city| connect_solr.delete_data
city_name = city.name end
job_cities << city_name
end
job_industries = [] def connect_solr
industries = record.industries.uniq SolrSearch.new
industries.each do |industry|
industry_name = industry.name
job_industries << industry_name
end
solr.add(id: id, title: title, overview: overview, salary: salary, company: company, experience: experience,
job_type: job_type, level: level, city: job_cities, industry: job_industries, slug: slug)
solr.commit
end
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