Insanely stupid and basic indexed search for MongoMapper. Probably pointless, but something I am playing around with on side projects.
Declare the plugin.
class Note include MongoMapper::Document plugin Hunt key :title, String key :body, String key :tags, Array timestamps! searches :title, :body, :tags end
You can configure Hunt using a Hunt.configure and passing block of options:
Hunt.configure do |config| config.searches_index_name = :"searches.default" config.additional_words_to_ignore ["bang", 'yabadabaduu'] end
This creates a key named searches that is a Hash. Title, body, and tags get mashed together before save into a unique array of stemmed words and stored in searches.default. If word contains non ascii chars, they'll be transliterated to ascii format using a utilities of babosa gem.
You can index the terms individually or with any other combination of keys.
Note.ensure_index :'searches.default' # or ... Note.ensure_index [[:user_id, Mongo::ASCENDING], [:'searches.default', Mongo::ASCENDING]] # or use config block Hunt.configure do |config| config.searches_index_name = :"searches.default" end
You also get a search class method that returns a scope.
# Returns Plucky::Query (MM Scope), no query actually fired Note.search('mongodb') # Gets everything matching mongodb Note.search('mongodb').all # Gets first page of everything matching mongodb Note.search('mongodb').paginate(:page => 1) # Counts everything matching mongodb Note.search('mongodb').count # Matches everything with any of the terms Note.search('mongodb is awesome')
Note on Patches/Pull Requests
Fork the project.
Make your feature addition or bug fix.
Add tests for it. This is important so I don't break it in a future version unintentionally.
Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
Send me a pull request. Bonus points for topic branches.
Copyright © 2010 John Nunemaker. See LICENSE for details.