searchkick 0.7.9 → 0.8.0
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/CHANGELOG.md +4 -0
- data/README.md +21 -8
- data/lib/searchkick.rb +4 -0
- data/lib/searchkick/query.rb +20 -10
- data/lib/searchkick/search.rb +1 -1
- data/lib/searchkick/version.rb +1 -1
- data/searchkick.gemspec +1 -1
- data/test/match_test.rb +9 -0
- metadata +6 -6
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: d97f04a7f7678a643933cfd0045ec2e6043ebf02
         | 
| 4 | 
            +
              data.tar.gz: c817fb9f49a0b6526beb3a2a2d5266c451258cfe
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: c19441dd8e684d5c1d0b4613dce000535dbd527ff35fce233bcdaba960037c9ec2853c1539ce8b038f3880a30c0a2be7717363f87be93b0789440718509c8c8c
         | 
| 7 | 
            +
              data.tar.gz: 247238fb70ade1d5ce6eeff5ddd3c0bf590bec9bb52e8e746fe12db58ffb7bf5bdde5f6385bc4167b8dd67bc151724b215253b15755e1cb75f30ec07fac1c025
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -45,12 +45,6 @@ Add this line to your application’s Gemfile: | |
| 45 45 | 
             
            gem 'searchkick'
         | 
| 46 46 | 
             
            ```
         | 
| 47 47 |  | 
| 48 | 
            -
            For Elasticsearch 1.2, use:
         | 
| 49 | 
            -
             | 
| 50 | 
            -
            ```ruby
         | 
| 51 | 
            -
            gem 'searchkick', github: 'ankane/searchkick', branch: 'elasticsearch-1.2'
         | 
| 52 | 
            -
            ```
         | 
| 53 | 
            -
             | 
| 54 48 | 
             
            For Elasticsearch 0.90, use version `0.6.3` and [this readme](https://github.com/ankane/searchkick/blob/v0.6.3/README.md).
         | 
| 55 49 |  | 
| 56 50 | 
             
            Add searchkick to models you want to search.
         | 
| @@ -161,11 +155,20 @@ Plays nicely with kaminari and will_paginate. | |
| 161 155 | 
             
            ```ruby
         | 
| 162 156 | 
             
            # controller
         | 
| 163 157 | 
             
            @products = Product.search "milk", page: params[:page], per_page: 20
         | 
| 158 | 
            +
            ```
         | 
| 159 | 
            +
             | 
| 160 | 
            +
            View with kaminari
         | 
| 164 161 |  | 
| 165 | 
            -
             | 
| 162 | 
            +
            ```erb
         | 
| 166 163 | 
             
            <%= paginate @products %>
         | 
| 167 164 | 
             
            ```
         | 
| 168 165 |  | 
| 166 | 
            +
            View with will_paginate
         | 
| 167 | 
            +
             | 
| 168 | 
            +
            ```erb
         | 
| 169 | 
            +
            <%= will_paginate @products %>
         | 
| 170 | 
            +
            ```
         | 
| 171 | 
            +
             | 
| 169 172 | 
             
            ### Partial Matches
         | 
| 170 173 |  | 
| 171 174 | 
             
            By default, results must match all words in the query.
         | 
| @@ -215,7 +218,7 @@ fields: [{"name^2" => :word_start}] # better interface on the way | |
| 215 218 | 
             
            ### Exact Matches
         | 
| 216 219 |  | 
| 217 220 | 
             
            ```ruby
         | 
| 218 | 
            -
            User.search "hi@searchkick.org", fields: [{email: :exact}]
         | 
| 221 | 
            +
            User.search "hi@searchkick.org", fields: [{email: :exact}, :name]
         | 
| 219 222 | 
             
            ```
         | 
| 220 223 |  | 
| 221 224 | 
             
            ### Language
         | 
| @@ -640,6 +643,16 @@ Then deploy and reindex: | |
| 640 643 | 
             
            rake searchkick:reindex CLASS=Product
         | 
| 641 644 | 
             
            ```
         | 
| 642 645 |  | 
| 646 | 
            +
            ### Performance
         | 
| 647 | 
            +
             | 
| 648 | 
            +
            For the best performance, add [Patron](https://github.com/toland/patron) to your Gemfile.
         | 
| 649 | 
            +
             | 
| 650 | 
            +
            ```ruby
         | 
| 651 | 
            +
            gem 'patron'
         | 
| 652 | 
            +
            ```
         | 
| 653 | 
            +
             | 
| 654 | 
            +
            **Note:** Patron is not available for Windows.
         | 
| 655 | 
            +
             | 
| 643 656 | 
             
            ### Automatic Failover
         | 
| 644 657 |  | 
| 645 658 | 
             
            Create an initializer `config/initializers/elasticsearch.rb` with multiple hosts:
         | 
    
        data/lib/searchkick.rb
    CHANGED
    
    
    
        data/lib/searchkick/query.rb
    CHANGED
    
    | @@ -6,7 +6,7 @@ module Searchkick | |
| 6 6 | 
             
                def initialize(klass, term, options = {})
         | 
| 7 7 | 
             
                  if term.is_a?(Hash)
         | 
| 8 8 | 
             
                    options = term
         | 
| 9 | 
            -
                    term =  | 
| 9 | 
            +
                    term = "*"
         | 
| 10 10 | 
             
                  else
         | 
| 11 11 | 
             
                    term = term.to_s
         | 
| 12 12 | 
             
                  end
         | 
| @@ -15,6 +15,8 @@ module Searchkick | |
| 15 15 | 
             
                  @term = term
         | 
| 16 16 | 
             
                  @options = options
         | 
| 17 17 |  | 
| 18 | 
            +
                  below12 = Gem::Version.new(Searchkick.server_version) < Gem::Version.new("1.2")
         | 
| 19 | 
            +
             | 
| 18 20 | 
             
                  boost_fields = {}
         | 
| 19 21 | 
             
                  fields =
         | 
| 20 22 | 
             
                    if options[:fields]
         | 
| @@ -127,6 +129,13 @@ module Searchkick | |
| 127 129 |  | 
| 128 130 | 
             
                      if conversions_field and options[:conversions] != false
         | 
| 129 131 | 
             
                        # wrap payload in a bool query
         | 
| 132 | 
            +
                        script_score =
         | 
| 133 | 
            +
                          if below12
         | 
| 134 | 
            +
                            {script_score: {script: "doc['count'].value"}}
         | 
| 135 | 
            +
                          else
         | 
| 136 | 
            +
                            {field_value_factor: {field: "count"}}
         | 
| 137 | 
            +
                          end
         | 
| 138 | 
            +
             | 
| 130 139 | 
             
                        payload = {
         | 
| 131 140 | 
             
                          bool: {
         | 
| 132 141 | 
             
                            must: payload,
         | 
| @@ -141,11 +150,8 @@ module Searchkick | |
| 141 150 | 
             
                                      match: {
         | 
| 142 151 | 
             
                                        query: term
         | 
| 143 152 | 
             
                                      }
         | 
| 144 | 
            -
                                    },
         | 
| 145 | 
            -
                                    script_score: {
         | 
| 146 | 
            -
                                      script: "doc['count'].value"
         | 
| 147 153 | 
             
                                    }
         | 
| 148 | 
            -
                                  }
         | 
| 154 | 
            +
                                  }.merge(script_score)
         | 
| 149 155 | 
             
                                }
         | 
| 150 156 | 
             
                              }
         | 
| 151 157 | 
             
                            }
         | 
| @@ -165,16 +171,20 @@ module Searchkick | |
| 165 171 | 
             
                    end
         | 
| 166 172 |  | 
| 167 173 | 
             
                    boost_by.each do |field, value|
         | 
| 174 | 
            +
                      script_score =
         | 
| 175 | 
            +
                        if below12
         | 
| 176 | 
            +
                          {script_score: {script: "#{value[:factor].to_f} * log(doc['#{field}'].value + 2.718281828)"}}
         | 
| 177 | 
            +
                        else
         | 
| 178 | 
            +
                          {field_value_factor: {field: field, factor: value[:factor].to_f, modifier: "ln2p"}}
         | 
| 179 | 
            +
                        end
         | 
| 180 | 
            +
             | 
| 168 181 | 
             
                      custom_filters << {
         | 
| 169 182 | 
             
                        filter: {
         | 
| 170 183 | 
             
                          exists: {
         | 
| 171 184 | 
             
                            field: field
         | 
| 172 185 | 
             
                          }
         | 
| 173 | 
            -
                        },
         | 
| 174 | 
            -
                        script_score: {
         | 
| 175 | 
            -
                          script: "#{value[:factor].to_f} * log(doc['#{field}'].value + 2.718281828)"
         | 
| 176 186 | 
             
                        }
         | 
| 177 | 
            -
                      }
         | 
| 187 | 
            +
                      }.merge(script_score)
         | 
| 178 188 | 
             
                    end
         | 
| 179 189 |  | 
| 180 190 | 
             
                    boost_where = options[:boost_where] || {}
         | 
| @@ -370,7 +380,7 @@ module Searchkick | |
| 370 380 | 
             
                        e.message.include?("No query registered for [function_score]]")
         | 
| 371 381 | 
             
                      )
         | 
| 372 382 |  | 
| 373 | 
            -
                      raise UnsupportedVersionError, "This version of Searchkick requires Elasticsearch 0 | 
| 383 | 
            +
                      raise UnsupportedVersionError, "This version of Searchkick requires Elasticsearch 1.0 or greater"
         | 
| 374 384 | 
             
                    elsif status_code == 400
         | 
| 375 385 | 
             
                      if e.message.include?("[multi_match] analyzer [searchkick_search] not found")
         | 
| 376 386 | 
             
                        raise InvalidQueryError, "Bad mapping - run #{searchkick_klass.name}.reindex"
         | 
    
        data/lib/searchkick/search.rb
    CHANGED
    
    
    
        data/lib/searchkick/version.rb
    CHANGED
    
    
    
        data/searchkick.gemspec
    CHANGED
    
    | @@ -19,7 +19,7 @@ Gem::Specification.new do |spec| | |
| 19 19 | 
             
              spec.require_paths = ["lib"]
         | 
| 20 20 |  | 
| 21 21 | 
             
              spec.add_dependency "activemodel"
         | 
| 22 | 
            -
              spec.add_dependency "elasticsearch", " | 
| 22 | 
            +
              spec.add_dependency "elasticsearch", ">= 1"
         | 
| 23 23 | 
             
              spec.add_dependency "hashie"
         | 
| 24 24 |  | 
| 25 25 | 
             
              spec.add_development_dependency "bundler", "~> 1.3"
         | 
    
        data/test/match_test.rb
    CHANGED
    
    | @@ -139,6 +139,15 @@ class TestMatch < Minitest::Unit::TestCase | |
| 139 139 | 
             
                assert_search "*", ["Product A", "Product B"]
         | 
| 140 140 | 
             
              end
         | 
| 141 141 |  | 
| 142 | 
            +
              def test_no_arguments
         | 
| 143 | 
            +
                assert_equal [], Product.search.to_a
         | 
| 144 | 
            +
              end
         | 
| 145 | 
            +
             | 
| 146 | 
            +
              def test_no_term
         | 
| 147 | 
            +
                store_names ["Product A"]
         | 
| 148 | 
            +
                assert_equal ["Product A"], Product.search(where: {name: "Product A"}).map(&:name)
         | 
| 149 | 
            +
              end
         | 
| 150 | 
            +
             | 
| 142 151 | 
             
              def test_to_be_or_not_to_be
         | 
| 143 152 | 
             
                store_names ["to be or not to be"]
         | 
| 144 153 | 
             
                assert_search "to be", ["to be or not to be"]
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: searchkick
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.8.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Andrew Kane
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2014-07- | 
| 11 | 
            +
            date: 2014-07-13 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activemodel
         | 
| @@ -28,16 +28,16 @@ dependencies: | |
| 28 28 | 
             
              name: elasticsearch
         | 
| 29 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 30 | 
             
                requirements:
         | 
| 31 | 
            -
                - - " | 
| 31 | 
            +
                - - ">="
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version:  | 
| 33 | 
            +
                    version: '1'
         | 
| 34 34 | 
             
              type: :runtime
         | 
| 35 35 | 
             
              prerelease: false
         | 
| 36 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 37 | 
             
                requirements:
         | 
| 38 | 
            -
                - - " | 
| 38 | 
            +
                - - ">="
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            -
                    version:  | 
| 40 | 
            +
                    version: '1'
         | 
| 41 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 42 | 
             
              name: hashie
         | 
| 43 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         |