diff --git a/app/controllers/shixuns_controller.rb b/app/controllers/shixuns_controller.rb index b47a9a346..221197f4e 100644 --- a/app/controllers/shixuns_controller.rb +++ b/app/controllers/shixuns_controller.rb @@ -121,25 +121,20 @@ class ShixunsController < ApplicationController @shixuns = status == "published" ? @shixuns.where(status: 2) : @shixuns.where(status: [0, 1]) end - ## 搜索关键字创建者、实训名称、院校名称 - unless params[:search].blank? - keyword = params[:search].strip - @shixuns = @shixuns.joins(user: [user_extension: :school]). - where("schools.name like '%#{keyword}%' - or concat(lastname, firstname) like '%#{keyword}%' - or shixuns.name like '%#{keyword.split(" ").join("%")}%'").distinct - end - ## 筛选 难度 if params[:diff].present? && params[:diff].to_i != 0 - @shixuns = @shixuns.where(trainee: params[:diff]) + @shixuns = @shixuns.where(trainee: params[:diff]) end - @total_count = @shixuns.count page = params[:page] || 1 - limit = params[:limit] || 15 + limit = params[:limit] || 10 + offset = (page.to_i - 1) * limit + order = params[:order] || "desc" + ## 搜索关键字创建者、实训名称、院校名称 + keyword = params[:search] + @shixuns = Shixun.search keyword, where: {id: @shixuns.pluck(:id)}, order: {"myshixuns_count" => order}, limit: limit, offset: offset - @shixuns = @shixuns.order("myshixuns_count desc").page(page).per(limit).includes(:shixun_info, :subjects, user: [user_extension: :school]) + @total_count = @shixuns.total_count end ## 获取顶部菜单 diff --git a/app/models/searchable/shixun.rb b/app/models/searchable/shixun.rb index 49e066eac..0b53e9df3 100644 --- a/app/models/searchable/shixun.rb +++ b/app/models/searchable/shixun.rb @@ -14,7 +14,9 @@ module Searchable::Shixun def search_data { name: name, - description: Util.extract_content(description)[0..Searchable::MAXIMUM_LENGTH] + description: Util.extract_content(description)[0..Searchable::MAXIMUM_LENGTH], + status: status, + myshixuns_count: myshixuns_count }.merge!(searchable_user_data) .merge!(searchable_challenge_data) end @@ -37,7 +39,7 @@ module Searchable::Shixun end def should_index? - status == 2 # published + [0, 1, 2].include?(status) # published end def to_searchable_json diff --git a/app/services/search_service.rb b/app/services/search_service.rb index 7cd1857bd..418021cc0 100644 --- a/app/services/search_service.rb +++ b/app/services/search_service.rb @@ -14,10 +14,12 @@ class SearchService < ApplicationService private def search_options - { + model_options = { index_name: index_names, model_includes: model_includes - }.merge(default_options) + } + model_options.merge(where: { status: 2 }) if index_names == [Shixun] + model_options.merge(default_options) end def index_names diff --git a/app/views/shixuns/shixun_list.json.jbuilder b/app/views/shixuns/shixun_list.json.jbuilder index 13c556014..54ac65a0a 100644 --- a/app/views/shixuns/shixun_list.json.jbuilder +++ b/app/views/shixuns/shixun_list.json.jbuilder @@ -1,15 +1,17 @@ -json.shixun_list @shixuns do |shixun| - json.shixun_id shixun.id - json.identifier shixun.identifier - json.shixun_name shixun.name - json.description shixun.description - json.myshixuns_count shixun.myshixuns_count - json.school shixun.user&.school_name - json.creator shixun.user&.full_name - json.level level_to_s(shixun.trainee) - json.subjects shixun.subjects do |subject| - json.(subject, :id, :name) - end -end +json.shixuns_count @total_count + +json.shixun_list do + json.array! @shixuns.with_highlights(multiple: true) do |obj, highlights| + puts obj + json.merge! obj.to_searchable_json + json.challenge_names obj.challenges.pluck(:subject) -json.shixuns_count @total_count \ No newline at end of file + json.title highlights.delete(:name)&.join('...') || obj.searchable_title + # json.description highlights.values[0,5].each { |arr| arr.is_a?(Array) ? arr.join('...') : arr }.join('
') + json.content highlights + json.level level_to_s(obj.trainee) + json.subjects obj.subjects do |subject| + json.(subject, :id, :name) + end + end +end \ No newline at end of file