If you find this plugin useful, please consider a donation to show your support!
Paypal address: email@example.com
This plugin allows boolean-queried fulltext search to be added to any Rails app with no dependencies and minimal setup.
./script/plugin install git://github.com/dougal/acts_as_indexed.git
rails plugin install git://github.com/dougal/acts_as_indexed.git
If you don't have git installed, you can download the plugin from the GitHub page (github.com/dougal/acts_as_indexed) 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 self.firstname + ' ' + self.lastname end ... end
Any of the configuration options in the Further Configuration section can be added as to the acts_as_indexed method call. These will override any defaults or global configuration.
To search, call the with_query named scope on your model, passing a query as an argument.
# Returns array of Post objects. my_search_results = Post.with_query('my search query') # Chain it with any number of ActiveRecord methods and named_scopes. my_search_results = Post.public.with_query('my search query').find(:all, :limit => 10) # return the first 10 matches which are public.
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.
Since with_query is a named scope, WillPaginate can be used in the normal fashion.
@images = Image.with_query('girl').paginate(:page => 1, :per_page => 5)
A config block can be provided in your environment files or initializers. Example showing defaults:
ActsAsIndexed.configure do |config| config.index_file = [RAILS_ROOT,'index'] config.index_file_depth = 3 config.min_word_size = 3 end
A full rundown of the available configuration options can be found in lib/acts_as_indexed/configuration.rb
To generate the RDoc documentation, run the rake rdoc task in the acts_as_indexed plugin folder. Then point your web 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. firstname.lastname@example.org
Douglas F Shearer - douglasfshearer.com
Future releases will be looking to add the following features:
Optional html scrubbing during indexing.
Ranking affected by field weightings.
Support for DataMapper, Sequel and the various MongoDB ORMs.
UTF-8 support. See the current solution here: