Skip to main content
Related: Models, Relation, Presets, Curation, Grouping, Faceting, Multi-search Use this page when you want reusable scopes or multi-step query chains.
Examples assume the SearchEngine::Book model from Model configuration.

Define model scopes

app/search_engine/book.rb
class SearchEngine::Book < SearchEngine::Base
  collection :books

  scope :active, -> { where(active: true) }
  scope :by_store, ->(store_id) { where(store_id: store_id) }
end

Combine search, filter, join, and scope

SearchEngine::Book
  .joins(:publisher)
  .active
  .where(publisher: { name: "Acme" })
  .where(["price >= ?", 100])
  .search("running")
  .include_fields(:sku, :name, publisher: [:name])
  .order(price: :asc)
  .page(1)
  .per(20)
  .to_a

Other common flows

Presets

SearchEngine::Book.all.preset(:default_search, mode: :merge)

Curation

SearchEngine::Book.all.pin("book_1", "book_2").hide("book_9")

Grouping and faceting

SearchEngine::Book
  .group_by(:publisher_id, limit: 1)
  .facet_by(:category_id, max_values: 10)
SearchEngine.multi_search(common: { query_by: "name" }) do |m|
  m.add :books, SearchEngine::Book.all.per(10)
  m.add :publishers, SearchEngine::Publisher.all.per(5)
end

Mutations

SearchEngine::Book.upsert(record: ::Book.first)
SearchEngine::Book.where(status: "archived").delete_all

Next steps