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
[ACTIVEMODEL] Added support for eager loading records of multiple types/classes

Closes #218.
[#218] Cleaned up the codebase for loading instances of multiple classes / single table inheritance

Previously, eagerly loading instances of multiple classes with the `load: true` option was not possible.

Now, you can use the `Tire.search` DSL for searching and loading multiple models from one or several indices:

    ActiveRecordModelOne.create :title => 'Title One', timestamp: Time.now.to_i

    s = Tire.search ['active_record_model_one', 'active_record_model_two'], :load => true do
                  query { string 'title' }
                  sort  { by :timestamp }
                end

    puts s.results[0].inspect
    # => <ActiveRecordModelOne id: 1, title: "Title One", timestamp: "1332437294">

Fixed indentation/formatting/whitespace throughout the suite :/

Fixes #80, fixes #178, fixes #218, fixes #277, closes #131.
[TEST] [FIX] Fix for the `search_type=count` integration test
[ACTIVEMODEL][FIX] URL escape document types for namespaced models

This is a combination of two commits:

a1775b3 ‣ [HTTP][FIX] Escape the document types in case they are namespaced. [2 months ago by Romain Gauthier]
7fec6e4 ‣ [ACTIVEMODEL][FIX] Fix the incorrect translation of namespaced models into `document_type` [3 months ago by Karel Minarik & Domizio Demichelis]
[UTILS] Added the `Tire::Utils` module