Ximate¶ ↑
ApproXIMATE fuzzy search for Ruby on Rails activerecord models.
Requirements¶ ↑
-
Rails >= 3.0.1
Installation¶ ↑
gem install ximate
Usage¶ ↑
In your model puts some like this:
class Post < ActiveRecord::Base define_index do add_text title, 3 add_text keywords.join(' '), 2 add_text body(:en) end end
In this case we can perform an appoximate search on title, keywords and body fields of posts where title is most important than keywords than body (title have priority 3, keywords 2 and body 1).
You can also define indexes for different locales like this:
class Post < ActiveRecord::Base [:en, :it, :de].each do |locale| define_index(locale) do add_text title(locale) add_text body(locale) end end end
Then you can perform a search
Post.asearch('Hello world').where(:public => true).limit(5)
asearch
method is chainable with the usual activerecord methods.
The cool stuff is that if you search with
Post.asearch('Hello worlds').where(:public => true)
the results will be the same! The error allowed by Ximate can be expressed as a percentage by setting the option Ximate::OPTIONS[:match_error_percent]
. Default value is 20%.
Finally you can set some Ximate options in your initializers.
Ximate::OPTIONS[:match_error_percent] = 20 Ximate::OPTIONS[:ignore_word_short_than] = 2 Ximate::OPTIONS[:async] = false Ximate::OPTIONS[:logger] = true Ximate::OPTIONS[:debug] = false
Ordering¶ ↑
You can order the results by rank (calculate by Ximate)
Post.asearch('Hello world').order('rank DESC').where(:public => true)
Unfortunately to do this, Ximate use the FIELD
function supported only by MySQL. So the ordering by rank works only with MySQL.
Questions or problems?¶ ↑
If you have any issues please add an issue on GitHub or fork the project and send a pull request.
Copyright¶ ↑
Copyright © 2010 Enrico Pilotto. MIT license.