seasyar

Seasyar is an active record implementation for seasy. It has two parts: an active record implementation of the storage interface of seasy and a way to make it easy to use with an active record model regardless of what storage you use.

Use seasyar in your rails model classes

Say you have a person class with the fields first_name, last_name and phone_number. To add search to this put the following somewhere in your class:

include Seasyar

after_save do
  index index_name, :first_name, :last_name, :phone_number
end

before_destroy do
  unindex index_name
end

and seasyar will use the configured seasy storage to update the named index. If none of the fields have changed the index will not be updated.

Also included with the module is a reindex method that can be used to force reindexing for an object. Just use it in the same way as index.

reindex index_name, :first_name, :last_name, :phone_number

This can be useful when adding seasyar for the first time to put index on all existing objects. Something like:

Person.all.each { |p| p.reindex index_name, :first_name, :last_name, :phone_number }

on the command line will do it.

Searching

Seasyar also adds a convenience method for searching:

include Seasyar

search index_name, query

but it is of course possible to use seasy directly also.

Storing the index with active record

You need to configure seasy to use the active record storage in seasyar. Put this in an initiliazer of before your code.

Seasy.configure do |config|
  config.storage = ActiveRecordStorage
end

You can use another storage implementation and still use sesyar for easy integration with seasy in your model classes.

You also need to put the following migration somewhere in your code (might build a generator for this....):

create_table "seasy_data", :force => true do |t|
  t.string   "key"
  t.string   "target"
  t.integer  "weight"
  t.datetime "created_at"
  t.datetime "updated_at"
  t.string   "source"
  t.string   "index_name"
end

Copyright (c) 2011 Fredrik Rubensson. See LICENSE.txt for further details.