Сортировать результаты поиска по Алголии в конце - PullRequest
0 голосов
/ 13 апреля 2020

Я делаю поиск благодаря API Алголии.

Это мой код для метода поиска:

    string_filter = []
    filters_params = [:type_of_rent,:type_of_property,:type_of_ad,:state]

    filters_params.each do |fp|
      if params[fp].present?
        params[fp].each do |s|
          string_filter << fp.to_s + ':' + s
        end
      end
    end
    price_filter = []
    if params['min-price'].present? || params['max-price'].present?
      if !params['min-price'].present? || params['max-price'].present?
        price_filter = ["price: 0 TO #{params['max-price']} "]
      elsif params['min-price'].present? || !params['max-price'].present?
        price_filter = ["price: #{params['min-price']} TO 1000000000 "]
      else
        price_filter = ["price: #{params['min-price']} TO #{params['max-price']} "]
      end
    end
    @results = []

    @results = Ad.search(params[:keyword],numericFilters: price_filter,facetFilters: string_filter, page: params[:page])
    session[:results] = @results.pluck(:id)
  end

Получив результаты поиска, я отображаю результаты поиска для их отображения.

В этом представлении мне нужно отсортировать результаты по цене и rentability_value.

Я пытался хранить @results в сеансе, чтобы получить их в методе фильтра (код ниже), но из-за разбивки на страницы, сделанной algolia, у меня есть только 10 первых результатов, хранящихся в сеансе [: results].

def filter
    @ads = []
    session[:results].each do |id|
      @ads << Ad.find(id)
    end
    case params[:sort_by]
      when "price_asc_to_desc"
        @results = Kaminari.paginate_array(@ads.sort_by{|t| t.price.to_i}).page(params[:page])
      when "price_desc_to_asc"
        @results = Kaminari.paginate_array(@ads.sort_by{|t| - t.price.to_i}).page(params[:page])
      when "renta_asc_to_desc"
    @results=Kaminari.paginate_array(@ads.sort_by{|t|t.rentability_value.to_i}).page(params[:page])
      when "renta_desc_to_asc"
        @results = Kaminari.paginate_array(@ads.sort_by{|t| t.rentability_value.to_i}).page(params[:page])
    end
  end 

Я искал в Алголии сделать c, но ничего о сортировке не получилось в бэк-энде.

Что вы думаете о моей реализации? Спасибо за ваши ответы.

...