If you are using Mongoid in your projects, probably you’ve already came across a situation where you need to do some kind of searching. Mongoid Search is a simple full text search implementation for Mongoid ORM.

Installation

In your Gemfile:

source 'http://rubygems.org'

gem 'mongoid_search'

Then:

bundle install

 

Examples

class Product
  include Mongoid::Document
  include Mongoid::Search
  field :brand
  field :name

  references_many :tags

  search_in :brand, :name, :tags => :name
end

class Tag
  include Mongoid::Document
  field :name

  referenced_in :product
end

Now when you save a product, you get a _keywords field automatically:

p = Product.new :brand => "Apple", :name => "iPhone"
p.tags << Tag.new(:name => "Amazing")
p.tags << Tag.new(:name => "Awesome")
p.tags << Tag.new(:name => "Superb")
p.save
=> true
p._keywords
=> ["apple", "iphone", "amazing", "awesome", "superb"]

Now you can run search, which will look in the _keywords field and return all matching results:

Product.search("apple iphone").size
=> 1

Note that the search is case insensitive, and accept partial searching too:

Product.search("ipho").size
=> 1

 

Options

:match :any – match any occurrence :all – match all ocurrences Default is :any.

search_in :brand, :name, { :tags => :name }, { :match => :any }

Product.search("apple motorola").size
=> 1

search_in :brand, :name, { :tags =>> :name }, { :match => :all }

Product.search("apple motorola").size
=> 0

 

Contribute

If you want to contribute, found any bug or have any suggestions, this is the github page of the project: github.com/mauriciozaffari/mongoid_search