Pre-release 0.4.0.pre
[DEPRECATE] Deprecate the support for passing JSON strings to `Index#store` [#275]
[ACTIVEMODEL] Support any level of mappings in `mapping`

Previously, only two levels of mappings were supported, ex:

    mapping do
      indexes :title, :type => 'string'
      indexes :author do
        indexes :first_name, :type => 'string'
        indexes :last_name,  :type => 'string', :boost => 100
      end
    end

This commit adds support for any level of mappings, ex:

    mapping do
      indexes :title, :type => 'string'
      indexes :author do
        indexes :first_name, :type => 'string'
        indexes :last_name,  :type => 'string', :boost => 100

        indexes :posts do
          indexes :title, :type => 'string', :boost => 10
        end
      end
    end

Closes #210.
[DOC] Update information for installing ElasticSearch to the 0.19.0 version
[DOC] Update documentation for Mongoid users in Readme

* Leave out needless code
* Use `as_json`, not `to_json` in the `Article.to_indexed_json`!
* Use the proxy to not mix it up with Mongoid interface: `Article.tire.search 'love'`

Fixes #157.
Added the `:raise` option to Index#bulk_store and Index#import

When the `:raise` option is passed, any exception received is re-raised.

Closes #224.
[#224] Cleaned up the Index#import interface and import/bulk_store tests

* Removed the positional argument `method` and moved it into the options Hash
* Updated tests
* Cleaned up mocked interfaces in Index tests
[#242] Added support for the Explain API

See <http://www.elasticsearch.org/guide/reference/api/search/explain.html>

* Added support for `explain` in the search DSL
* Added support for the `_explanation` field on resulting items
[#88] Added specification for passing routing in search requests
[#15] Refactored and fixed passing of Hash payloads in `Tire.search`

* Return `Search::Search.new ...`, not perform custom POST request, dude
* Changed Search::Search#to_hash to work with options[:payload]
* Added simple integration test

Closes #15.
[#15] Refactored and fixed passing of Hash payloads in `Tire.search`

* Return `Search::Search.new ...`, not perform custom POST request, dude
* Changed Search::Search#to_hash to work with options[:payload]
* Added simple integration test

Closes #15.
Added support for passing search params (`search_type`, `timeout`, etc.) to search requests

Previously, passing of parameters such as search_type [http://www.elasticsearch.org/guide/reference/api/search/search-type.html]
to search requests wasn't supported, so in cases like getting counts or being interested in just facets,
the workaround was to use `size 0`.

This commit implements passing of parameters to search requests as URL-encoded string.

Just pass the parameters you need to the `search` method:

    s = Tire.search 'articles-test', :search_type => 'count' do
      query { term :tags, 'ruby' }
    end

    p s.results.total
    # => 2
    p s.json['hits']
    # => {"total"=>2, "max_score"=>0.0, "hits"=>[]}

See the possible list of request parameters here:

* http://www.elasticsearch.org/guide/reference/api/search/request-body.html
* http://www.elasticsearch.org/guide/reference/api/search/uri-request.html

Closes #242, closes #198, closes #196, closes #89, closes #88, closes #258, closes #100.
[TEST] [FIX] Add missing mock of performing request to ES in `unit/index_test`
Added `Tire::Index.response` to check HTTP responses after index operations
[TASKS] Refactored the "tire:import" Rake task

* Simplified code, getting rid of needless variable
* Formatting
[TASKS] Added the "tire:index:drop" Rake task

    $ rake -D tire:index:drop

Delete indices passed in the INDEX environment variable; separate multiple indices by comma.

Pass name of a single index to drop in the INDEX environmnet variable:

    $ rake environment tire:index:drop INDEX=articles

Pass names of multiple indices to drop in the INDEX or INDICES environmnet variable:

    $ rake environment tire:index:drop INDICES=articles-2011-01,articles-2011-02

Closes #199.
Added "Filter Facets" support

    s = Tire.search('articles') do
      query { string 'T*' }

      filter :terms, tags: ['ruby']

      facet 'filtered-by-ruby-tag' do
        filter :tags, 'ruby'
      end
    end

    p s.results.facets
    # => {"filtered-by-ruby-tag"=>{"_type"=>"filter", "count"=>1}}

See <http://www.elasticsearch.org/guide/reference/api/search/facets/filter-facet.html>

Closes #285.
[#285] Cleaned up the "Filter Facets" support

* Moved around tests
* Added basic unit test
[#281] Fixed the problem with composite keys (such as highlight results) in `Results::Item`

    @document = Results::Item.new :highlight => { 'name.ngrams' => 'abc' }
    assert_not_nil @document.highlight['name.ngrams']

Reported in https://github.com/thedeeno/tire/commit/0bd1a675f679aacfb28c7dd118ab411f3949eb7b.

Closes #281.
[FIX] Assorted fixes for Ruby 1.8.7 compatibility