virtual_monk
virtual_monk

Reputation: 120

ActiveRecord Fuzzy Search

I'm looking to perform a search to find an object similar to this:

Object(id: 1, example: "abc")

by using a search like this:

params[:search] = "abcdef"
Object.where("example LIKE ?", "#{params[:search]%")

but am only able to use the above example if my search has less characters than my object, not more.

Upvotes: 2

Views: 7344

Answers (2)

Phillip van Heerden
Phillip van Heerden

Reputation: 156

Note: the fuzzily gem does not work with Rails 6. This solution has been deprecated.

The fuzzily gem allows you to do fuzzy searching of ActiveRecord models that you've instrumented appropriately.

Fuzzily finds misspelled, prefix, or partial needles in a haystack of strings. It's a fast, trigram-based, database-backed fuzzy string search/match engine for Rails.

Once you've installed the gem, you can instrument your model as follows:

class MyStuff < ActiveRecord::Base
  # assuming my_stuffs has a 'name' attribute
  fuzzily_searchable :name
end

You can then perform fuzzy searches as follows:

MyStuff.find_by_fuzzy_name('Some Name', :limit => 10)
# => records

Upvotes: 0

SomeSchmo
SomeSchmo

Reputation: 665

I think it should be

params[:search] = "abcdef"
Object.where("example LIKE ?", "%#{params[:search]}%")

Also might want to use ilike for case insensitive search (if you're using postgres)

Upvotes: 2

Related Questions