elasticsearch-dsl 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +26 -11
- data/lib/elasticsearch/dsl/search/aggregation.rb +1 -1
- data/lib/elasticsearch/dsl/search/aggregations/global.rb +7 -3
- data/lib/elasticsearch/dsl/search/aggregations/stats.rb +15 -2
- data/lib/elasticsearch/dsl/search/aggregations/terms.rb +12 -2
- data/lib/elasticsearch/dsl/version.rb +1 -1
- data/test/integration/search_aggregation_geo_test.rb +1 -1
- data/test/integration/search_aggregations_test.rb +24 -1
- data/test/unit/aggregations/global_test.rb +19 -1
- data/test/unit/aggregations/stats_test.rb +8 -0
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: c2037d3abda2b5b40dab3cd2618751d20c0fcc06
         | 
| 4 | 
            +
              data.tar.gz: b31c3b77ac4628ea87e96f85b9e06b2f8a592b91
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 8c7b217d8851ccb1f90263a48f05dff3517dca17d57296acbb750d2fd5232f35c7ed8f6cd5e060e6a30eb93937975c03c04dacd85006ca9fbe9827478471fab8
         | 
| 7 | 
            +
              data.tar.gz: 1c8efb817f44b4ce94d08c56aaa43b4eb74b6a348e2b55582d70a3325f437271a1bb602c7fec4a5d0e4124ab3d2987fb2176b9aa34ad95c4ed1f8b9f37f76c28
         | 
    
        data/README.md
    CHANGED
    
    | @@ -108,7 +108,11 @@ All Elasticsearch DSL features are supported, namely: | |
| 108 108 | 
             
            * [Pagination](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-from-size.html)
         | 
| 109 109 | 
             
            * [Options](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-body.html) (source filtering, highlighting, etc)
         | 
| 110 110 |  | 
| 111 | 
            -
            An example of a complex search definition  | 
| 111 | 
            +
            An example of a complex search definition is below.
         | 
| 112 | 
            +
             | 
| 113 | 
            +
            **NOTE:** In order to run the example, you have to allow restoring from the `data.elasticsearch.org`
         | 
| 114 | 
            +
                     repository by adding this configuration to your `elasticsearch.yml`:
         | 
| 115 | 
            +
                     `repositories.url.allowed_urls: ["https://s3.amazonaws.com/data.elasticsearch.org/*"]`
         | 
| 112 116 |  | 
| 113 117 | 
             
            ```ruby
         | 
| 114 118 | 
             
            require 'awesome_print'
         | 
| @@ -120,18 +124,17 @@ include Elasticsearch::DSL | |
| 120 124 |  | 
| 121 125 | 
             
            client = Elasticsearch::Client.new transport_options: { request: { timeout: 3600, open_timeout: 3600 } }
         | 
| 122 126 |  | 
| 123 | 
            -
             | 
| 124 | 
            -
             | 
| 127 | 
            +
            puts "Recovering the 'bicycles.stackexchange.com' index...".yellow
         | 
| 128 | 
            +
             | 
| 125 129 | 
             
            client.indices.delete index: 'bicycles.stackexchange.com', ignore: 404
         | 
| 126 130 |  | 
| 127 | 
            -
            puts "Recovering the 'bicycles.stackexchange.com' index...".gray
         | 
| 128 131 | 
             
            client.snapshot.create_repository repository: 'data.elasticsearch.org', body: { type: 'url', settings: { url: 'https://s3.amazonaws.com/data.elasticsearch.org/bicycles.stackexchange.com/' } }
         | 
| 129 132 | 
             
            client.snapshot.restore repository: 'data.elasticsearch.org', snapshot: 'bicycles.stackexchange.com', body: { indices: 'bicycles.stackexchange.com' }
         | 
| 130 133 | 
             
            until client.cluster.health(level: 'indices')['indices']['bicycles.stackexchange.com']['status'] == 'green'
         | 
| 131 | 
            -
              r = client.indices. | 
| 132 | 
            -
              print "\r#{r['index']['size']} of #{r[' | 
| 134 | 
            +
              r = client.indices.recovery(index: 'bicycles.stackexchange.com', human: true)['bicycles.stackexchange.com']['shards'][0] rescue nil
         | 
| 135 | 
            +
              print "\r#{r['index']['size']['recovered'] rescue '0b'} of #{r['index']['size']['total'] rescue 'N/A'}".ljust(52).gray
         | 
| 133 136 | 
             
              sleep 1
         | 
| 134 | 
            -
            end
         | 
| 137 | 
            +
            end; puts
         | 
| 135 138 |  | 
| 136 139 | 
             
            # The search definition
         | 
| 137 140 | 
             
            #
         | 
| @@ -164,9 +167,9 @@ definition = search { | |
| 164 167 | 
             
                    end
         | 
| 165 168 | 
             
                  end
         | 
| 166 169 |  | 
| 167 | 
            -
                  # Multiply the default `_score` by  | 
| 170 | 
            +
                  # Multiply the default `_score` by the document rating
         | 
| 168 171 | 
             
                  #
         | 
| 169 | 
            -
                  functions << { script_score: { script: '_score *  | 
| 172 | 
            +
                  functions << { script_score: { script: '_score * doc["rating"].value' } }
         | 
| 170 173 | 
             
                end
         | 
| 171 174 | 
             
              end
         | 
| 172 175 |  | 
| @@ -175,6 +178,12 @@ definition = search { | |
| 175 178 | 
             
              aggregation :tags do
         | 
| 176 179 | 
             
                terms do
         | 
| 177 180 | 
             
                  field 'tags'
         | 
| 181 | 
            +
             | 
| 182 | 
            +
                  # Calculate average view count per tag (inner aggregation)
         | 
| 183 | 
            +
                  #
         | 
| 184 | 
            +
                  aggregation :avg_view_count do
         | 
| 185 | 
            +
                    avg field: 'view_count'
         | 
| 186 | 
            +
                  end
         | 
| 178 187 | 
             
                end
         | 
| 179 188 | 
             
              end
         | 
| 180 189 |  | 
| @@ -185,6 +194,12 @@ definition = search { | |
| 185 194 | 
             
                  field    'creation_date'
         | 
| 186 195 | 
             
                  interval 'month'
         | 
| 187 196 | 
             
                  format   'yyyy-MM'
         | 
| 197 | 
            +
             | 
| 198 | 
            +
                  # Calculate the statistics on comment count per day (inner aggregation)
         | 
| 199 | 
            +
                  #
         | 
| 200 | 
            +
                  aggregation :comments do
         | 
| 201 | 
            +
                    stats field: 'comment_count'
         | 
| 202 | 
            +
                  end
         | 
| 188 203 | 
             
                end
         | 
| 189 204 | 
             
              end
         | 
| 190 205 |  | 
| @@ -206,14 +221,14 @@ definition = search { | |
| 206 221 | 
             
              source ['title', 'tags', 'creation_date', 'rating', 'user.location', 'user.display_name']
         | 
| 207 222 | 
             
            }
         | 
| 208 223 |  | 
| 209 | 
            -
            puts "Search definition #{'-'*63}\n". | 
| 224 | 
            +
            puts "Search definition #{'-'*63}\n".yellow
         | 
| 210 225 | 
             
            ap   definition.to_hash
         | 
| 211 226 |  | 
| 212 227 | 
             
            # Execute the search request
         | 
| 213 228 | 
             
            #
         | 
| 214 229 | 
             
            response = client.search index: 'bicycles.stackexchange.com', type: ['question','answer'], body: definition
         | 
| 215 230 |  | 
| 216 | 
            -
            puts "\nSearch results #{'-'*66}\n". | 
| 231 | 
            +
            puts "\nSearch results #{'-'*66}\n".yellow
         | 
| 217 232 | 
             
            ap   response
         | 
| 218 233 | 
             
            ```
         | 
| 219 234 |  | 
| @@ -9,14 +9,18 @@ module Elasticsearch | |
| 9 9 | 
             
                    #
         | 
| 10 10 | 
             
                    #     search do
         | 
| 11 11 | 
             
                    #       aggregation :all_documents do
         | 
| 12 | 
            -
                    #         global
         | 
| 12 | 
            +
                    #         global do
         | 
| 13 | 
            +
                    #           aggregation :avg_clicks do
         | 
| 14 | 
            +
                    #             avg field: 'clicks'
         | 
| 15 | 
            +
                    #           end
         | 
| 16 | 
            +
                    #         end
         | 
| 13 17 | 
             
                    #       end
         | 
| 14 18 | 
             
                    #     end
         | 
| 15 19 | 
             
                    #
         | 
| 16 | 
            -
                    # @see  | 
| 20 | 
            +
                    # @see https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-global-aggregation.html
         | 
| 17 21 | 
             
                    #
         | 
| 18 22 | 
             
                    class Global
         | 
| 19 | 
            -
                      include  | 
| 23 | 
            +
                      include BaseAggregationComponent
         | 
| 20 24 | 
             
                    end
         | 
| 21 25 |  | 
| 22 26 | 
             
                  end
         | 
| @@ -5,7 +5,7 @@ module Elasticsearch | |
| 5 5 |  | 
| 6 6 | 
             
                    # A multi-value metrics aggregation which returns statistical information on numeric values
         | 
| 7 7 | 
             
                    #
         | 
| 8 | 
            -
                    # @example
         | 
| 8 | 
            +
                    # @example Passing the options as a Hash
         | 
| 9 9 | 
             
                    #
         | 
| 10 10 | 
             
                    #     search do
         | 
| 11 11 | 
             
                    #       aggregation :clicks_stats do
         | 
| @@ -13,10 +13,23 @@ module Elasticsearch | |
| 13 13 | 
             
                    #       end
         | 
| 14 14 | 
             
                    #     end
         | 
| 15 15 | 
             
                    #
         | 
| 16 | 
            -
                    # @ | 
| 16 | 
            +
                    # @example Passing the options as a block
         | 
| 17 | 
            +
                    #
         | 
| 18 | 
            +
                    #     search do
         | 
| 19 | 
            +
                    #       aggregation :clicks_stats do
         | 
| 20 | 
            +
                    #         stats do
         | 
| 21 | 
            +
                    #           field 'clicks'
         | 
| 22 | 
            +
                    #         end
         | 
| 23 | 
            +
                    #       end
         | 
| 24 | 
            +
                    #     end
         | 
| 25 | 
            +
                    #
         | 
| 26 | 
            +
                    # @see https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-stats-aggregation.html
         | 
| 17 27 | 
             
                    #
         | 
| 18 28 | 
             
                    class Stats
         | 
| 19 29 | 
             
                      include BaseComponent
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                      option_method :field
         | 
| 32 | 
            +
                      option_method :script
         | 
| 20 33 | 
             
                    end
         | 
| 21 34 |  | 
| 22 35 | 
             
                  end
         | 
| @@ -5,13 +5,23 @@ module Elasticsearch | |
| 5 5 |  | 
| 6 6 | 
             
                    # A multi-bucket aggregation which returns the collection of terms and their document counts
         | 
| 7 7 | 
             
                    #
         | 
| 8 | 
            -
                    # @example
         | 
| 8 | 
            +
                    # @example Passing the options as a Hash
         | 
| 9 9 | 
             
                    #
         | 
| 10 10 | 
             
                    #     aggregation :tags do
         | 
| 11 11 | 
             
                    #       terms field: 'tags'
         | 
| 12 12 | 
             
                    #     end
         | 
| 13 13 | 
             
                    #
         | 
| 14 | 
            -
                    # @ | 
| 14 | 
            +
                    # @example Passing the options as a block
         | 
| 15 | 
            +
                    #
         | 
| 16 | 
            +
                    #     search do
         | 
| 17 | 
            +
                    #       aggregation :tags do
         | 
| 18 | 
            +
                    #         terms do
         | 
| 19 | 
            +
                    #           field 'tags'
         | 
| 20 | 
            +
                    #         end
         | 
| 21 | 
            +
                    #       end
         | 
| 22 | 
            +
                    #     end
         | 
| 23 | 
            +
                    #
         | 
| 24 | 
            +
                    # @see https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html
         | 
| 15 25 | 
             
                    #
         | 
| 16 26 | 
             
                    class Terms
         | 
| 17 27 | 
             
                      include BaseAggregationComponent
         | 
| @@ -36,7 +36,7 @@ module Elasticsearch | |
| 36 36 | 
             
                        assert_equal 3, response['aggregations']['tags']['value']
         | 
| 37 37 | 
             
                      end
         | 
| 38 38 |  | 
| 39 | 
            -
                      should "return tag counts per clicks range" do
         | 
| 39 | 
            +
                      should "return tag counts per clicks range as an inner (nested) aggregation" do
         | 
| 40 40 | 
             
                        response = @client.search index: 'test', body: search {
         | 
| 41 41 | 
             
                          aggregation :clicks do
         | 
| 42 42 | 
             
                            range field: 'clicks' do
         | 
| @@ -95,6 +95,29 @@ module Elasticsearch | |
| 95 95 | 
             
                        assert_equal 13, response['aggregations']['avg_clicks']['value'].to_i
         | 
| 96 96 | 
             
                      end
         | 
| 97 97 |  | 
| 98 | 
            +
                      should "define a global aggregation" do
         | 
| 99 | 
            +
                        response = @client.search index: 'test', body: search {
         | 
| 100 | 
            +
                            query do
         | 
| 101 | 
            +
                              filtered filter: { terms: { tags: ['two'] } }
         | 
| 102 | 
            +
                            end
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                            aggregation :avg_clicks do
         | 
| 105 | 
            +
                              avg field: 'clicks'
         | 
| 106 | 
            +
                            end
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                            aggregation :all_documents do
         | 
| 109 | 
            +
                              global do
         | 
| 110 | 
            +
                                aggregation :avg_clicks do
         | 
| 111 | 
            +
                                  avg field: 'clicks'
         | 
| 112 | 
            +
                                end
         | 
| 113 | 
            +
                              end
         | 
| 114 | 
            +
                            end
         | 
| 115 | 
            +
                        }.to_hash
         | 
| 116 | 
            +
             | 
| 117 | 
            +
                        assert_equal 15, response['aggregations']['avg_clicks']['value'].to_i
         | 
| 118 | 
            +
                        assert_equal 13, response['aggregations']['all_documents']['avg_clicks']['value'].to_i
         | 
| 119 | 
            +
                      end
         | 
| 120 | 
            +
             | 
| 98 121 | 
             
                      should "return statistics on clicks" do
         | 
| 99 122 | 
             
                        response = @client.search index: 'test', body: search {
         | 
| 100 123 | 
             
                          aggregation :stats_clicks do
         | 
| @@ -12,7 +12,25 @@ module Elasticsearch | |
| 12 12 | 
             
                      should "be converted to a Hash" do
         | 
| 13 13 | 
             
                        assert_equal({ global: {} }, subject.to_hash)
         | 
| 14 14 | 
             
                      end
         | 
| 15 | 
            -
             | 
| 15 | 
            +
             | 
| 16 | 
            +
                      should "take a block" do
         | 
| 17 | 
            +
                        subject = Global.new do
         | 
| 18 | 
            +
                        end
         | 
| 19 | 
            +
                        assert_equal({global: {} }, subject.to_hash)
         | 
| 20 | 
            +
                      end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                      should "define aggregations" do
         | 
| 23 | 
            +
                        subject = Global.new do
         | 
| 24 | 
            +
                          aggregation :foo do
         | 
| 25 | 
            +
                            terms field: "bar"
         | 
| 26 | 
            +
                          end
         | 
| 27 | 
            +
                        end
         | 
| 28 | 
            +
                        expected = {
         | 
| 29 | 
            +
                          aggregations: { foo: { terms: { field: "bar" } } },
         | 
| 30 | 
            +
                          global: {}
         | 
| 31 | 
            +
                        }
         | 
| 32 | 
            +
                        assert_equal(expected, subject.to_hash)
         | 
| 33 | 
            +
                      end
         | 
| 16 34 | 
             
                    end
         | 
| 17 35 | 
             
                  end
         | 
| 18 36 | 
             
                end
         | 
| @@ -17,6 +17,14 @@ module Elasticsearch | |
| 17 17 | 
             
                        subject = Stats.new foo: 'bar'
         | 
| 18 18 | 
             
                        assert_equal({ stats: { foo: 'bar' } }, subject.to_hash)
         | 
| 19 19 | 
             
                      end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                      should "take a block" do
         | 
| 22 | 
            +
                        subject = Stats.new do
         | 
| 23 | 
            +
                          field 'bar'
         | 
| 24 | 
            +
                        end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                        assert_equal({stats: { field: 'bar' } }, subject.to_hash)
         | 
| 27 | 
            +
                      end
         | 
| 20 28 | 
             
                    end
         | 
| 21 29 | 
             
                  end
         | 
| 22 30 | 
             
                end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: elasticsearch-dsl
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Karel Minarik
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2015- | 
| 11 | 
            +
            date: 2015-12-21 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         |