Acts As Indexed is a plugin which provides a pain-free way to add fulltext search to your Ruby on Rails app
Switch branches/tags
Clone or download
Pull request Compare This branch is 2 commits ahead, 289 commits behind dougal:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.



If you find this plugin useful, please consider a donation to show your support!

Paypal address:


This plugin allows boolean-queried fulltext search to be added to any Rails app with no dependencies and minimal setup.



./script/plugin install git://

If you don't have git installed, you can download the plugin from the GitHub page ( and unpack it into the vendor/plugins directory of your rails app.



Add acts_as_indexed to the top of any models you want to index, along with a list of the fields you wish to be indexed.

class Post < ActiveRecord::Base acts_as_indexed :fields => [:title, :body]

… end

The fields are not limited to model fields, but can be any instance method of the current model.

class User < ActiveRecord::Base acts_as_indexed :fields => [:address, :fullname]

def fullname return self.firstname + ' ' + self.lastname end

… end Acts_as_indexed automatically filters out query words shorter than 3 characters, for performance sake. This value can be changed by passing min_word_size along with the fields. NOTE: The index files must be rebuilt by deleting the 'index' directory in your app's root directory.

class Post < ActiveRecord::Base acts_as_indexed :fields => [:title, :body], :min_word_size => 5

… end


To search, call the find_with_index method on your model, passing a query as the first argument. The optional ids_only parameter, when set to true, will return only the IDs of any matching records.

# Returns array of Post objects. my_search_results = Post.find_with_index('my search query') # Pass any of the ActiveRecord find options to the search. my_search_results = Post.find_with_index('my search query',{:limit => 10}) # return the first 10 matches. # Returns array of IDs. my_search_results = Post.find_with_index('my search query',{},{:ids_only => true}) # => [12,19,33…

Query Options

The following query operators are supported:


This is the default option. 'cat dog' will find records matching 'cat' AND 'dog'.


'cat -dog' will find records matching 'cat' AND NOT 'dog'


'cat +me' will find records matching 'cat' and 'me', even if 'me' is smaller than the min_word_size


Quoted terms are matched as phrases. '“cat dog”' will find records matching the whole phrase. Quoted terms can be preceded by the NOT operator; 'cat -“big dog”' etc. Quoted terms can include words shorter than the min_word_size.


Pagination is supported via the paginate_search method whose first argument is the search query, followed all the standard will_paginate arguments.

@images = Image.paginate_search 'girl', :page => 1, :per_page => 5

RDoc Documentation

To generate the RDoc documentation, run the rake rdoc task in the acts_as_indexed plugin folder. Then point your browser at /vendor/plugins/acts_as_indexed/rdoc/index.html.

Alternatively, you can view the rdoc documentation online.

Problems, Comments, Suggestions?

All of the above are most welcome.


Douglas F Shearer -

Future Releases

Future releases will be looking to add the following features:

  • Optional html scrubbing during indexing.

  • Ranking affected by field weightings.