Search integration for couchrest_model users that are using couchdb-lucene.
$ gem install couchrest_model_search
By simply requiring 'couchrest_model_search' in your project, all of your CouchRest::Model::Base models will respond to a search class method. This method will, by default, perform a full-text search on your model for any query you pass to it.
For example, suppose we have defined the following model:
class Article < CouchRest::Model::Base
  property :title
  property :author
  property :body
end
And now, let's create some articles:
Article.create(
  :title => "CouchDB is fun!", 
  :author => "moonmaster9000", 
  :body => "CouchDB is the most fun EVAR."
)
Article.create(
  :title => "CouchDB Lucene FTW", 
  :author => "moonmaster9000", 
  :body => "CouchDB Lucene makes your documents easily searchable!"
)
Article.create(
  :title => "Search your CouchDB documents from Ruby", 
  :author => "dorren", 
  :body => "Use the couchrest_model_search gem to search your documents from Ruby."
)
If we searched for "CouchDB", we would receive all documents we've created, since they all contained the word "CouchDB" in one of the properties:
Article.search("CouchDB").map(&:title) 
  #==> ["CouchDB is fun!", "CouchDB Lucene FTW", "Search your CouchDB documents from Ruby"]
Of course, searching for "moonmaster9000" would only return the first two documents:
Article.search("moonmaster9000").map(&:title) 
  #==> ["CouchDB is fun!", "CouchDB Lucene FTW"]
By default, the search method will use an underlying fulltext search index function to query your content. You can override the definition of this default "fulltext" search index function via the search_by class method:
class Article < CouchRest::Model::Base
  property :title
  property :author
  property :body
  search_by :fulltext, 
    :index => %(
      function(doc){
        //... your code here
      }
    )
end
You can also create other search indexes. For example, suppose we'd like to index only the titles of articles for search:
class Article < CouchRest::Model::Base
  property :title
  property :author
  property :body
  search_by :title, 
    :index => %(
      function(doc){
        var contentToIndex = new Document();
        contentToIndex.add(doc.title);
        return contentToIndex;
      }
    )
end
Now, to perform a search by title (instead of a fulltext search), simply pass :by_title along with your query to the search method:
Article.search "some query", :by_title
You can pass any CouchDB-Lucene query options to your search via an optional third parameter to search:
Article.search "apples", :fulltext, :limit => 10
The following characters have special meaning to Lucene when added to a query:
+ - && || ! ( ) { } [ ] ^ " ~ * ? : \
By default, couchrest_model_search will not escape your query. If you want it to automatically escape these special characters in your query, then use the escaped_search method:
Article.escaped_search "2001:March:10"