Commit 0d67bd1c by Ngô Trung Hưng

factory code function search

parent 5bdd43ef
Pipeline #1040 failed with stages
in 0 seconds
......@@ -27,3 +27,8 @@
# Ignore master key for decrypting credentials and more.
/config/master.key
/lib/csv
.vscode
config/settings.local.yml
config/settings/*.local.yml
config/environments/*.local.yml
......@@ -36,6 +36,7 @@ gem 'carrierwave'
gem 'rails-i18n'
gem 'i18n-js'
gem 'rsolr'
gem 'config'
# Use ActiveStorage variant
# gem 'mini_magick', '~> 4.8'
......
......@@ -89,7 +89,11 @@ GEM
execjs
coffee-script-source (1.12.2)
concurrent-ruby (1.1.6)
config (2.2.1)
deep_merge (~> 1.2, >= 1.2.1)
dry-validation (~> 1.0, >= 1.0.0)
crass (1.0.6)
deep_merge (1.2.1)
devise (4.7.2)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
......@@ -106,6 +110,44 @@ GEM
activemodel-serializers-xml (>= 1.0)
activesupport (>= 5.0)
request_store (>= 1.0)
dry-configurable (0.11.6)
concurrent-ruby (~> 1.0)
dry-core (~> 0.4, >= 0.4.7)
dry-equalizer (~> 0.2)
dry-container (0.7.2)
concurrent-ruby (~> 1.0)
dry-configurable (~> 0.1, >= 0.1.3)
dry-core (0.4.9)
concurrent-ruby (~> 1.0)
dry-equalizer (0.3.0)
dry-inflector (0.2.0)
dry-initializer (3.0.3)
dry-logic (1.0.7)
concurrent-ruby (~> 1.0)
dry-core (~> 0.2)
dry-equalizer (~> 0.2)
dry-schema (1.5.3)
concurrent-ruby (~> 1.0)
dry-configurable (~> 0.8, >= 0.8.3)
dry-core (~> 0.4)
dry-equalizer (~> 0.2)
dry-initializer (~> 3.0)
dry-logic (~> 1.0)
dry-types (~> 1.4)
dry-types (1.4.0)
concurrent-ruby (~> 1.0)
dry-container (~> 0.3)
dry-core (~> 0.4, >= 0.4.4)
dry-equalizer (~> 0.3)
dry-inflector (~> 0.1, >= 0.1.2)
dry-logic (~> 1.0, >= 1.0.2)
dry-validation (1.5.4)
concurrent-ruby (~> 1.0)
dry-container (~> 0.7, >= 0.7.1)
dry-core (~> 0.4)
dry-equalizer (~> 0.2)
dry-initializer (~> 3.0)
dry-schema (~> 1.5)
erubi (1.9.0)
execjs (2.7.0)
faraday (1.0.1)
......@@ -290,6 +332,7 @@ DEPENDENCIES
carrierwave
chromedriver-helper
coffee-rails (~> 4.2)
config
devise
dotenv-rails
draper
......
......@@ -5,6 +5,6 @@ class HistoriesController < ApplicationController
def index
histories = current_user.histories.order(created_at: :desc)
@jobs = histories.map(&:job).select { |val| val.present? }
@jobs = histories.map(&:job).compact
end
end
......@@ -5,14 +5,13 @@ class SearchController < ApplicationController
def multi_search
solr = connect_solr
@keyword = params[:keyword]
@industry = Industry.find_by(id: params[:industry]) if params[:industry].present?
@city = City.find_by(id: params[:city]) if params[:city].present?
# Value data is Array, index[0]: name_job or company name, index[1]: id industry, index[2]: id location
data = sub_space_params!(params[:keyword], params[:industry], params[:city])
query = if params[:keyword].blank? && params[:industry].blank? && params[:city].blank?
@industry = Industry.find_by(id: params[:industry_id]) if params[:industry_id].present?
@city = City.find_by(id: params[:city_id]) if params[:city_id].present?
data = sub_space_params!(params[:keyword], params[:industry_id], params[:city_id])
query = if params[:keyword].blank? && params[:industry_id].blank? && params[:city_id].blank?
'*:*'
else
"solr((name: #{data[0]}) OR (company_name: #{data[0]})) AND (industry_id: #{data[1]}) AND (location_id: #{data[2]})"
"solr((name: #{data[:keyword]}) OR (company_name: #{data[:keyword]})) AND (industry_id: #{data[:industry_id]}) AND (location_id: #{data[:location_id]})"
end
response = solr.paginate(params[:page], NUMBER_RECORD_IN_PAGE, 'select', params: { q: query })
@results = Kaminari.paginate_array(response['response']['docs'], total_count: response['response']['numFound']).page(params[:page]).per(NUMBER_RECORD_IN_PAGE)
......@@ -22,16 +21,15 @@ class SearchController < ApplicationController
end
def sub_space_params!(keyword, industry_id, location_id)
arr_params = []
keyword = keyword.present? ? RSolr.solr_escape(keyword) : ''
industry_id = industry_id.present? ? RSolr.solr_escape(industry_id) : ''
location_id = location_id.present? ? RSolr.solr_escape(location_id) : ''
arr_params << keyword << industry_id << location_id
arr_params.each { |val| val.sub!('', '*') if val.blank? }
arr_params = {}
arr_params[:keyword] = RSolr.solr_escape(keyword)
arr_params[:industry_id] = RSolr.solr_escape(industry_id)
arr_params[:location_id] = RSolr.solr_escape(location_id)
arr_params.each_value { |val| val.sub!('', '*') if val.blank? }
end
def load_data_dropdown
@industries = Industry.order(name: :asc).all
@industries = Industry.order(name: :asc)
@cities = City.select(:id, :name)
end
......
......@@ -32,14 +32,14 @@
<i class="fa fa-list-ul" aria-hidden="true"></i>
</div>
<% selected = @industry.blank? ? '*' : @industry.id %>
<%= select_tag 'industry', options_from_collection_for_select(@industries, 'id', 'name', selected), prompt: t('pages.banner.all_industries'), class: 'show_list_industries' %>
<%= select_tag 'industry_id', options_from_collection_for_select(@industries, 'id', 'name', selected), prompt: t('pages.banner.all_industries'), class: 'show_list_industries' %>
</div>
<div class="search_location">
<div class="icon_list">
<i class="fas fa-map-marker-alt"></i>
</div>
<% selected = @city.blank? ? '*' : @city.id %>
<%= select_tag 'city', options_from_collection_for_select(@cities, 'id', 'name', selected), prompt: t('pages.banner.all_locations'), class: 'show_list_cities' %>
<%= select_tag 'city_id', options_from_collection_for_select(@cities, 'id', 'name', selected), prompt: t('pages.banner.all_locations'), class: 'show_list_cities' %>
</div>
<div class="search_submit">
<%= f.submit t('pages.banner.btn_text_search'), name: nil, class: 'btn_search_submit'%>
......@@ -64,14 +64,14 @@
<i class="fa fa-list-ul" aria-hidden="true"></i>
</div>
<% selected = @industry.blank? ? '*' : @industry.id %>
<%= select_tag 'industry', options_from_collection_for_select(@industries, 'id', 'name', selected), prompt: t('pages.banner.all_industries'), class: 'show_list_industries' %>
<%= select_tag 'industry_id', options_from_collection_for_select(@industries, 'id', 'name', selected), prompt: t('pages.banner.all_industries'), class: 'show_list_industries' %>
</div>
<div class="search_location">
<div class="icon_list">
<i class="fas fa-map-marker-alt"></i>
</div>
<% selected = @city.blank? ? '*' : @city.id %>
<%= select_tag 'city', options_from_collection_for_select(@cities, 'id', 'name', selected), prompt: t('pages.banner.all_locations'), class: 'show_list_cities' %>
<%= select_tag 'city_id', options_from_collection_for_select(@cities, 'id', 'name', selected), prompt: t('pages.banner.all_locations'), class: 'show_list_cities' %>
</div>
<div class="search_submit">
<%= f.submit t('pages.banner.btn_text_search'), name: nil, class: 'btn_search_submit'%>
......@@ -95,13 +95,13 @@
<div class="col-sm-6 col-xs-12">
<div class="search_industries_mobile">
<% selected = @industry.blank? ? '*' : @industry.id %>
<%= select_tag 'industry', options_from_collection_for_select(@industries, 'id', 'name', selected), prompt: t('pages.banner.all_industries'), class: 'show_list_industries_mobile' %>
<%= select_tag 'industry_id', options_from_collection_for_select(@industries, 'id', 'name', selected), prompt: t('pages.banner.all_industries'), class: 'show_list_industries_mobile' %>
</div>
</div>
<div class="col-sm-6 col-xs-12">
<div class="search_location_mobile">
<% selected = @city.blank? ? '*' : @city.id %>
<%= select_tag 'city', options_from_collection_for_select(@cities, 'id', 'name', selected), prompt: t('pages.banner.all_locations'), class: 'show_list_cities_mobile' %>
<%= select_tag 'city_id', options_from_collection_for_select(@cities, 'id', 'name', selected), prompt: t('pages.banner.all_locations'), class: 'show_list_cities_mobile' %>
</div>
</div>
</div>
......
......@@ -11,15 +11,12 @@ module Venjob
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 5.2
config.exceptions_app = self.routes
config.autoload_paths << Rails.root.join('lib/service')
config.autoload_paths << Rails.root.join('lib/src')
config.eager_load_paths << Rails.root.join('lib/business')
config.eager_load_paths << Rails.root.join('lib/solr')
config.autoload_paths += Dir[Rails.root.join('lib', '{service,src}')]
config.eager_load_paths += Dir[Rails.root.join('lib', '{business,solr}')]
# i18n
config.i18n.available_locales = [:en, :vi]
config.i18n.default_locale = :vi
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
# Settings in config/environments/* take precedence over those specified here.
# Application configuration can go into files in config/initializers
# -- all .rb files in that directory are automatically loaded after loading
......
Config.setup do |config|
# Name of the constant exposing loaded settings
config.const_name = 'Settings'
# Ability to remove elements of the array set in earlier loaded settings file. For example value: '--'.
#
# config.knockout_prefix = nil
# Overwrite an existing value when merging a `nil` value.
# When set to `false`, the existing value is retained after merge.
#
# config.merge_nil_values = true
# Overwrite arrays found in previously loaded settings file. When set to `false`, arrays will be merged.
#
# config.overwrite_arrays = true
# Load environment variables from the `ENV` object and override any settings defined in files.
#
# config.use_env = false
# Define ENV variable prefix deciding which variables to load into config.
#
# Reading variables from ENV is case-sensitive. If you define lowercase value below, ensure your ENV variables are
# prefixed in the same way.
#
# When not set it defaults to `config.const_name`.
#
config.env_prefix = 'SETTINGS'
# What string to use as level separator for settings loaded from ENV variables. Default value of '.' works well
# with Heroku, but you might want to change it for example for '__' to easy override settings from command line, where
# using dots in variable names might not be allowed (eg. Bash).
#
# config.env_separator = '.'
# Ability to process variables names:
# * nil - no change
# * :downcase - convert to lower case
#
# config.env_converter = :downcase
# Parse numeric values as integers instead of strings.
#
# config.env_parse_values = true
# Validate presence and type of specific config values. Check https://github.com/dry-rb/dry-validation for details.
#
# config.schema do
# required(:name).filled
# required(:age).maybe(:int?)
# required(:email).filled(format?: EMAIL_REGEX)
# end
end
url_server_solr: 'http://localhost:8983/solr/venjob'
url_server_solr: 'http://.../solr/venjob'
\ No newline at end of file
......@@ -2,10 +2,9 @@
module SolrSetting
class SolrServer
URL_SERVER_SOLR = 'http://localhost:8983/solr/venjob'
def self.connection
RSolr.connect url: URL_SERVER_SOLR
RSolr.connect url: Settings.url_server_solr
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