# Discovery configuration In this section, we will discuss some of the features available to control the discovery experience, including pagination, sorting, and fielded searches. ## Per Page Three configuration options control the behavior of the per-page and pagination controls. ```ruby config.per_page # [10,20,50,100] config.default_per_page # the first per_page value, or the value given here config.max_per_page # 100 ``` The options presented in the per-page dropdown are the values for the `per_page` configuration, in the order given. The `default_per_page` can be used if you want to offer a default per-page value that isn't the smallest value. Finally, `max_per_page` is used as a sanity check for user-supplied values. We can explicitly set the configuration in our `CatalogController` configuration: ```ruby class CatalogController ... configure_blacklight do |config| ... config.per_page = [6,12,24,48] config.default_per_page = 24 end end ``` ## Sort Fields You can configure the available sort options. The sort parameter is passed through to Solr, so the value must be a supported [sort format](http://wiki.apache.org/solr/CommonQueryParameters#sort). ```ruby config.add_sort_field 'score desc, pub_date_sort desc, title_sort asc', :label => 'relevance' config.add_sort_field 'pub_date_sort desc, title_sort asc', :label => 'year' config.add_sort_field 'author_sort asc, title_sort asc', :label => 'author' config.add_sort_field 'title_sort asc, pub_date_sort desc', :label => 'title' ``` #### An aside about Blacklight solr field configurations The Blacklight solr field configuration is very expressive, and supports several different flavors of configuration. These are all functionally equivalent: ```ruby config.add_sort_field 'pub_date_sort desc, title_sort asc', :label => 'year' # for sort fields, the `sort` key contains the Solr sort information. For other fields, the `field` key is used. config.add_sort_field :sort => 'pub_date_sort desc, title_sort asc', :label => 'year' # the "key" (first argument) will be used in user-facing url parameters. config.add_sort_field 'year', :sort => 'pub_date_sort desc, title_sort asc', :label => 'year' # The block format may be useful when using complex logic in the configuration settings config.add_sort_field 'year' do |field| field.sort = 'pub_date_sort desc, title_sort asc' field.label = field.key.humanize end # The array-format allows you to add multiple values at once. config.add_sort_field [ {sort: 'pub_date_sort desc, title_sort asc', label: 'year}, { sort: '....', ...} ] ``` You may choose the format that is appropriately concise and legible in the context of your application and configuration. The `add_*_field` is appending values to a configuration hash. In some cases, it may be useful to modify that hash directly. ```ruby config.sort_fields['year'].label = "Year Created" ``` ## Targeting Search Queries at Configurable Fields Search queries can be targeted at configurable fields (or sets of fields) to return precise search results. ```ruby config.add_search_field 'all_fields', :label => 'All Fields' ``` ```ruby # Now we see how to over-ride Solr request handler defaults, in this # case for a BL "search field", which is really a dismax aggregate # of Solr search fields. config.add_search_field('title') do |field| # solr_parameters hash are sent to Solr as ordinary url query params. field.solr_parameters = { :'spellcheck.dictionary' => 'title' } # :solr_local_parameters will be sent using Solr LocalParams # syntax, as eg {! qf=$title_qf }. This is neccesary to use # Solr parameter de-referencing like $title_qf. # See: http://wiki.apache.org/solr/LocalParams field.solr_local_parameters = { :qf => '$title_qf', :pf => '$title_pf' } end ```