parent
122ef893c9
commit
cb8dd3dc9f
@ -1,9 +1,12 @@
|
||||
class SearchsController < ApplicationController
|
||||
after_action :record_search_keyword, only: [:index]
|
||||
|
||||
def index
|
||||
@results = SearchService.call(search_params)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def search_params
|
||||
params.permit(:keyword, :type, :page, :per_page)
|
||||
end
|
||||
|
@ -0,0 +1,7 @@
|
||||
class Weapps::HotKeywordsController < Weapps::BaseController
|
||||
def index
|
||||
keywords = []
|
||||
keywords = HotSearchKeyword.hot(8) if HotSearchKeyword.available?
|
||||
render_ok(keywords: keywords)
|
||||
end
|
||||
end
|
@ -0,0 +1,13 @@
|
||||
class Weapps::SearchsController < Weapps::BaseController
|
||||
after_action :record_search_keyword, only: [:index]
|
||||
|
||||
def index
|
||||
@results = Weapps::SearchQuery.call(search_params)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def search_params
|
||||
params.permit(:keyword, :type, :page, :per_page)
|
||||
end
|
||||
end
|
@ -0,0 +1,37 @@
|
||||
class Weapps::SearchQuery < ApplicationQuery
|
||||
include ElasticsearchAble
|
||||
|
||||
attr_reader :params
|
||||
|
||||
def initialize(params)
|
||||
@params = params
|
||||
end
|
||||
|
||||
def call
|
||||
modal_name.search(keyword, search_options)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def search_options
|
||||
hash = {
|
||||
fields: [:name],
|
||||
page: page,
|
||||
per_page: per_page
|
||||
}
|
||||
hash.merge(where: { status: 2 }) if modal_name == Shixun
|
||||
|
||||
hash
|
||||
end
|
||||
|
||||
def modal_name
|
||||
@_modal_name ||= begin
|
||||
case params[:type].to_s
|
||||
when 'subject' then Subject
|
||||
when 'shixun' then Shixun
|
||||
when 'course' then Course
|
||||
else Subject
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,9 @@
|
||||
json.count @results.total_count
|
||||
json.results do
|
||||
json.array! @results.with_highlights(multiple: true) do |obj, highlights|
|
||||
json.merge! obj.to_searchable_json
|
||||
json.type obj.class.name.downcase
|
||||
|
||||
json.title highlights.delete(:name)&.join('...') || obj.searchable_title
|
||||
end
|
||||
end
|
Loading…
Reference in new issue