2013-03-12 6 views
4

У меня возникают проблемы с разбивкой по страницам результатов поиска на работу с Elasticsearch, Tire и Kaminari.Разбивка страницы с помощью Elasticsearch, Tire и Kaminari

Я ищу все модели в своем приложении (новости, картины, книги) в качестве общего поиска по сайту и, следовательно, вам нужен блок для поиска шин, в моем контроллере сайта для более мелкозернистого контроля, например, показывая больше чем по умолчанию 10 записей:

class SiteController < ApplicationController 
    def search 
    # @results = Painting.search(params[:query]) 
    query = params[:query] 
    @results = Tire.search ['news','paintings', 'books'], :page => (params[:page]||1), :per_page=> (params[:per_page] || 3) do 
     query { string query } 
     size 100 
    end 
    end 
end 

в моей странице результатов поиска, у меня есть следующий код:

- if @results 
    - @results.results.each do |result| 
    = result.title 
#pagination 
    = paginate @results 

и во всех моих моделях, у меня есть собственное отображение и включает в себя от шины:

# - - - - - - - - - - - - - - - - 
    # Elasticsearch 
    # - - - - - - - - - - - - - - - - 
    include Tire::Model::Search 
    include Tire::Model::Callbacks 

    mapping do 
    indexes :id, index: :not_analyzed 
    indexes :title, boost: 100 
    indexes :slug, boost: 100, as: 'slug' 
    indexes :content 
    indexes :image, as: 'image.thumb.url' 
    indexes :tags, as: 'tags' 
    indexes :gallery_name, as: 'gallery.name' 
    indexes :created_at, :type => 'date' 
    end 

Я гарантировал, что все мои записи правильно проиндексированы в Elasticsearch.

Проблема, которую я имею, я не могу заставить его работать, последняя ошибка:

неопределенный метод `current_page»

Все мысли были бы весьма признателен. Спасибо.

ответ

0

У шины есть метод для волонтерской жемчужины, включенной в ее lib, поэтому я предпочел бы это, а не камень Каминари. Если в любом случае вы все еще хотите быть с Каминари, соберите результаты поиска шин.

@results = @results.all.to_hash 

paginate @results 
3

Можете ли вы попробовать это ??? Когда я использовал параметр per_page, у меня была аналогичная проблема. Итак, я перешел к вариантам размера, предоставленным Tire. Я не уверен, что пошло не так. Но, явно устанавливая и используя от размера и сделал трюк для меня ...

class SiteController < ApplicationController 
    def search 
    # @results = Painting.search(params[:query]) 
    options = { :page => (params[:page] || 1), :size => 100 } 
    query = params[:query] 
    @results = Tire.search ['news','paintings', 'books'], options do 
     query { string query } 
     from options[:size].to_i * (options[:page].to_i-1) 
    end 
    end 
end 
+0

Что этот фрагмент кода действительно помогла мне там, где я должен поставить от и вариантов размера. Они должны быть в стороне от кодового блока для поиска, а не как часть параметров метода. Спасибо за это, Vamsi Krishna –

+0

Рад, что этот кусок кода вам помог ... @YosepKim –