Project

ximate

0.01
No commit activity in last 3 years
No release in over 3 years
Approximate fuzzy search for Ruby on Rails activerecord models.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies
 Project Readme

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 © 2010 Enrico Pilotto. MIT license.