Class: Groonga::Table
- Defined in:
- ext/groonga/rb-grn-table.c,
lib/groonga/pagination.rb
Overview
This class is base class which represents Rroonga’s table. Array , Hash , PatriciaTrie are extended from this class.
Direct Known Subclasses
Defined Under Namespace
Modules: KeySupport
Instance Method Summary collapse
-
#paginate(sort_keys, options = {}) ⇒ Object
ページネーション用便利メソッド。ページネーションをした い場合は #sort よりも #paginate の方が便利。.
Instance Method Details
#paginate(sort_keys, options = {}) ⇒ Object
ページネーション用便利メソッド。ページネーションをした い場合は #sort よりも #paginate の方が便利。
説明文(descriptionカラム)を「Ruby」で全文検索し、 検索結果をスコアの高い順にソートして、10項目ずつ表示する 場合は以下のようになる。
query = "Ruby"
entries = Groonga["entries"]
selected_entries = entries.select do |record|
entry.description =~ query
end
paged_entries = selected_entries.paginate([["_score", :desc]],
:page => 1,
:size => 10)
#sort と違い、返される Groonga::Table オブジェクトには Pagination モジュールがextendされており、 以下のようにページネーション情報を取得できる。
puts "#{paged_entries.n_records}件ヒット"
puts "#{paged_entries.start_offset}-#{paged_entries.end_offset}件を表示"
paged_entries.each do |entry|
puts entry.description
end
sort_keys には ソートに用いる情報を指定する。 指定の仕方は #sort と同様なので、詳細は #sort を参照。
options に指定可能な値は以下の通り。
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/groonga/pagination.rb', line 114 def paginate(sort_keys, ={}) _size = size page_size = [:size] || 10 minimum_size = [1, _size].min if page_size < 1 raise TooSmallPageSize.new(page_size, minimum_size.._size) end max_page = [(_size / page_size.to_f).ceil, 1].max page = [:page] || 1 if page < 1 raise TooSmallPage.new(page, 1..max_page) elsif max_page < page raise TooLargePage.new(page, 1..max_page) end offset = (page - 1) * page_size limit = page_size records = sort(sort_keys, :offset => offset, :limit => limit) records.extend(Pagination) records.send(:set_pagination_info, page, page_size, _size) records end |