searchkick 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 35f9202e63447e7c182bd2a34737e7a519888e91
4
- data.tar.gz: 19a7a8d24dd5ff687687e235c64971cb979f42f2
3
+ metadata.gz: c83a41bfb177e764c6a5862ce0c4a2c44982986c
4
+ data.tar.gz: 1978b3e1fe918e5654c1b3835aa327abd76931b3
5
5
  SHA512:
6
- metadata.gz: 762a4b1e6ce4a31e2a3d75ac235954222f26c3d5361d0bb8fd1504aeaf3f294c0f569a15208d1e2e38428715bdaa1bdc879356b2040bff5bb313f763e3091ccc
7
- data.tar.gz: 1f7c6ea8338b6fe7479a22a55d523a753903fd703f142522806b83926be3cf3b20d10b1b2c39eb507657af97f48e84372d1c6cb102e10fe6a05ea40031eefe16
6
+ metadata.gz: f8bcea422ad62e709ff1639973d2cb9f729fef6d1103de9e9f0fa7fdbfe1099c0291544aa01256e5ddff44593b05bc4241fa4f377da5289082e19fbfa1c5fa02
7
+ data.tar.gz: bb797236441c2119490b05a8f4ee62afe98d69be313feec80e86a58256a2a4eb5c6d680ec7f78c84e0309f6e7b465c9c097e66d92fa9bb9889c83847483a1802
@@ -1,3 +1,7 @@
1
+ ## 1.1.1
2
+
3
+ - Added support for `{lat: lat, lon: lon}` as preferred format for locations
4
+
1
5
  ## 1.1.0
2
6
 
3
7
  - Added `below` option to misspellings to improve performance
data/README.md CHANGED
@@ -29,13 +29,9 @@ Plus:
29
29
 
30
30
  [![Build Status](https://travis-ci.org/ankane/searchkick.svg?branch=master)](https://travis-ci.org/ankane/searchkick)
31
31
 
32
- We highly recommend tracking queries and conversions
33
-
34
- :zap: [Searchjoy](https://github.com/ankane/searchjoy) makes it easy
35
-
36
32
  ## Get Started
37
33
 
38
- [Install Elasticsearch](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/setup.html). For Homebrew, use:
34
+ [Install Elasticsearch](https://www.elastic.co/guide/en/elasticsearch/reference/current/setup.html). For Homebrew, use:
39
35
 
40
36
  ```sh
41
37
  brew install elasticsearch
@@ -72,7 +68,7 @@ products.each do |product|
72
68
  end
73
69
  ```
74
70
 
75
- Searchkick supports the complete [Elasticsearch Search API](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-search.html). As your search becomes more advanced, we recommend you use the [Elasticsearch DSL](#advanced) for maximum flexibility.
71
+ Searchkick supports the complete [Elasticsearch Search API](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-search.html). As your search becomes more advanced, we recommend you use the [Elasticsearch DSL](#advanced) for maximum flexibility.
76
72
 
77
73
  ### Queries
78
74
 
@@ -111,7 +107,7 @@ Order
111
107
  order: {_score: :desc} # most relevant first - default
112
108
  ```
113
109
 
114
- [All of these sort options are supported](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-sort.html)
110
+ [All of these sort options are supported](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-sort.html)
115
111
 
116
112
  Limit / offset
117
113
 
@@ -303,13 +299,13 @@ You can change this with:
303
299
  Product.search "zucini", misspellings: {edit_distance: 2} # zucchini
304
300
  ```
305
301
 
306
- To improve performance for correctly spelled queries (which should be a majority for most applications), Searchkick can first perform a search without misspellings, and if there are few results, perform another with them. [master]
302
+ To improve performance for correctly spelled queries (which should be a majority for most applications), Searchkick can first perform a search without misspellings, and if there are too few results, perform another with them.
307
303
 
308
304
  ```ruby
309
305
  Product.search "zuchini", misspellings: {below: 5}
310
306
  ```
311
307
 
312
- If there are fewer than 5 results, a 2nd search is performed for misspellings.
308
+ If there are fewer than 5 results, a 2nd search is performed with misspellings enabled. The result of this query is returned.
313
309
 
314
310
  Turn off misspellings with:
315
311
 
@@ -426,33 +422,38 @@ class Image < ActiveRecord::Base
426
422
  end
427
423
  ```
428
424
 
429
- ### Keep Getting Better
425
+ ### Analytics
430
426
 
431
- Searchkick uses conversion data to learn what users are looking for. If a user searches for “ice cream” and adds Ben & Jerry’s Chunky Monkey to the cart (our conversion metric at Instacart), that item gets a little more weight for similar searches.
427
+ We highly recommend tracking searches and conversions.
432
428
 
433
- The first step is to define your conversion metric and start tracking conversions. The database works well for low volume, but feel free to use Redis or another datastore.
429
+ [Searchjoy](https://github.com/ankane/searchjoy) makes it easy.
434
430
 
435
431
  ```ruby
436
- class Search < ActiveRecord::Base
437
- belongs_to :product
438
- # fields: id, query, searched_at, converted_at, product_id
439
- end
432
+ Product.search "apple", track: {user_id: current_user.id}
440
433
  ```
441
434
 
435
+ [See the docs](https://github.com/ankane/searchjoy) for how to install and use.
436
+
437
+ ### Keep Getting Better
438
+
439
+ Searchkick can use conversion data to learn what users are looking for. If a user searches for “ice cream” and adds Ben & Jerry’s Chunky Monkey to the cart (our conversion metric at Instacart), that item gets a little more weight for similar searches.
440
+
441
+ The first step is to define your conversion metric and start tracking conversions. The database works well for low volume, but feel free to use Redis or another datastore.
442
+
442
443
  You do **not** need to clean up the search queries. Searchkick automatically treats `apple` and `APPLES` the same.
443
444
 
444
445
  Next, add conversions to the index.
445
446
 
446
447
  ```ruby
447
448
  class Product < ActiveRecord::Base
448
- has_many :searches
449
+ has_many :searches, class_name: "Searchjoy::Search"
449
450
 
450
451
  searchkick conversions: "conversions" # name of field
451
452
 
452
453
  def search_data
453
454
  {
454
455
  name: name,
455
- conversions: searches.group("query").count
456
+ conversions: searches.group(:query).uniq.count(:user_id)
456
457
  # {"ice cream" => 234, "chocolate" => 67, "cream" => 2}
457
458
  }
458
459
  end
@@ -471,14 +472,12 @@ Order results differently for each user. For example, show a user’s previousl
471
472
 
472
473
  ```ruby
473
474
  class Product < ActiveRecord::Base
474
-
475
475
  def search_data
476
476
  {
477
477
  name: name,
478
478
  orderer_ids: orders.pluck(:user_id) # boost this product for these users
479
479
  }
480
480
  end
481
-
482
481
  end
483
482
  ```
484
483
 
@@ -488,7 +487,7 @@ Reindex and search with:
488
487
  Product.search "milk", boost_where: {orderer_ids: current_user.id}
489
488
  ```
490
489
 
491
- ### Autocomplete
490
+ ### Instant Search / Autocomplete
492
491
 
493
492
  Autocomplete predicts what a user will type, making the search experience faster and easier.
494
493
 
@@ -499,15 +498,15 @@ Autocomplete predicts what a user will type, making the search experience faster
499
498
  First, specify which fields use this feature. This is necessary since autocomplete can increase the index size significantly, but don’t worry - this gives you blazing faster queries.
500
499
 
501
500
  ```ruby
502
- class City < ActiveRecord::Base
503
- searchkick match: :word_start
501
+ class Book < ActiveRecord::Base
502
+ searchkick match: :word_start, searchable: [:title, :author]
504
503
  end
505
504
  ```
506
505
 
507
506
  Reindex and search with:
508
507
 
509
508
  ```ruby
510
- City.search "san fr", fields: [:name]
509
+ Book.search "tipping poi"
511
510
  ```
512
511
 
513
512
  Typically, you want to use a JavaScript library like [typeahead.js](http://twitter.github.io/typeahead.js/) or [jQuery UI](http://jqueryui.com/autocomplete/).
@@ -517,10 +516,15 @@ Typically, you want to use a JavaScript library like [typeahead.js](http://twitt
517
516
  First, add a route and controller action.
518
517
 
519
518
  ```ruby
520
- # app/controllers/cities_controller.rb
521
- class CitiesController < ApplicationController
519
+ # app/controllers/books_controller.rb
520
+ class BooksController < ApplicationController
522
521
  def autocomplete
523
- render json: City.search(params[:query], fields: [:name], limit: 10).map(&:name)
522
+ render json: Book.search(params[:query], {
523
+ fields: ["title^5", "author"],
524
+ limit: 10,
525
+ load: false,
526
+ misspellings: {below: 5}
527
+ }).map(&:title)
524
528
  end
525
529
  end
526
530
  ```
@@ -534,8 +538,8 @@ Then add the search box and JavaScript code to a view.
534
538
  <script src="typeahead.js"></script>
535
539
  <script>
536
540
  $("#query").typeahead({
537
- name: "city",
538
- remote: "/cities/autocomplete?query=%QUERY"
541
+ name: "book",
542
+ remote: "/books/autocomplete?query=%QUERY"
539
543
  });
540
544
  </script>
541
545
  ```
@@ -559,7 +563,7 @@ products.suggestions # ["peanut butter"]
559
563
 
560
564
  ### Aggregations
561
565
 
562
- [Aggregations](http://www.elasticsearch.org/guide/reference/api/search/facets/) provide aggregated search data.
566
+ [Aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-facets.html) provide aggregated search data.
563
567
 
564
568
  ![Aggregations](http://ankane.github.io/searchkick/facets.png)
565
569
 
@@ -757,7 +761,7 @@ Additional options, including fragment size, can be specified for each field:
757
761
  Band.search "cinema", fields: [:name], highlight: {fields: {name: {fragment_size: 200}}}
758
762
  ```
759
763
 
760
- You can find available highlight options in the [Elasticsearch reference](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-highlighting.html#_highlighted_fragments).
764
+ You can find available highlight options in the [Elasticsearch reference](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-highlighting.html#_highlighted_fragments).
761
765
 
762
766
  ### Similar Items
763
767
 
@@ -775,7 +779,7 @@ class City < ActiveRecord::Base
775
779
  searchkick locations: ["location"]
776
780
 
777
781
  def search_data
778
- attributes.merge location: [latitude, longitude]
782
+ attributes.merge location: {lat: latitude, lon: longitude}
779
783
  end
780
784
  end
781
785
  ```
@@ -783,13 +787,13 @@ end
783
787
  Reindex and search with:
784
788
 
785
789
  ```ruby
786
- City.search "san", where: {location: {near: [37, -114], within: "100mi"}} # or 160km
790
+ City.search "san", where: {location: {near: {lat: 37, lon: -114}, within: "100mi"}} # or 160km
787
791
  ```
788
792
 
789
793
  Bounded by a box
790
794
 
791
795
  ```ruby
792
- City.search "san", where: {location: {top_left: [38, -123], bottom_right: [37, -122]}}
796
+ City.search "san", where: {location: {top_left: {lat: 38, lon: -123}, bottom_right: {lat: 37, lon: -122}}}
793
797
  ```
794
798
 
795
799
  ### Boost By Distance
@@ -797,13 +801,13 @@ City.search "san", where: {location: {top_left: [38, -123], bottom_right: [37, -
797
801
  Boost results by distance - closer results are boosted more
798
802
 
799
803
  ```ruby
800
- City.search "san", boost_by_distance: {field: :location, origin: [37, -122]}
804
+ City.search "san", boost_by_distance: {field: :location, origin: {lat: 37, lon: -122}}
801
805
  ```
802
806
 
803
- Also supports [additional options](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#_decay_functions)
807
+ Also supports [additional options](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#_decay_functions)
804
808
 
805
809
  ```ruby
806
- City.search "san", boost_by_distance: {field: :location, origin: [37, -122], function: :linear, scale: "30mi", decay: 0.5}
810
+ City.search "san", boost_by_distance: {field: :location, origin: {lat: 37, lon: -122}, function: :linear, scale: "30mi", decay: 0.5}
807
811
  ```
808
812
 
809
813
  ### Routing
@@ -893,7 +897,7 @@ Searchkick uses `ENV["ELASTICSEARCH_URL"]` for the Elasticsearch server. This d
893
897
 
894
898
  ### Heroku
895
899
 
896
- Choose an add-on: [SearchBox](https://elements.heroku.com/addons/searchbox), [Bonsai](https://elements.heroku.com/addons/bonsai), or [Found](https://addons.heroku.com/foundelasticsearch).
900
+ Choose an add-on: [SearchBox](https://elements.heroku.com/addons/searchbox), [Bonsai](https://elements.heroku.com/addons/bonsai), or [Found](https://elements.heroku.com/addons/foundelasticsearch).
897
901
 
898
902
  ```sh
899
903
  # SearchBox
@@ -917,18 +921,38 @@ heroku run rake searchkick:reindex CLASS=Product
917
921
 
918
922
  ### Amazon Elasticsearch Service
919
923
 
920
- You must use an [IP-based access policy](http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-gsg-search.html) for Searchkick to work.
921
-
922
- Include `elasticsearch 1.0.14` or greater in your Gemfile.
924
+ Include `elasticsearch 1.0.15` or greater in your Gemfile.
923
925
 
924
926
  ```ruby
925
- gem "elasticsearch", ">= 1.0.14"
927
+ gem "elasticsearch", ">= 1.0.15"
926
928
  ```
927
929
 
928
930
  Create an initializer `config/initializers/elasticsearch.rb` with:
929
931
 
930
932
  ```ruby
931
- ENV["ELASTICSEARCH_URL"] = "http://es-domain-1234.us-east-1.es.amazonaws.com"
933
+ ENV["ELASTICSEARCH_URL"] = "https://es-domain-1234.us-east-1.es.amazonaws.com"
934
+ ```
935
+
936
+ To use signed request, include in your Gemfile:
937
+
938
+ ```ruby
939
+ gem 'faraday_middleware-aws-signers-v4'
940
+ ```
941
+
942
+ and add to your initializer:
943
+
944
+ ```ruby
945
+ Searchkick.client =
946
+ Elasticsearch::Client.new(
947
+ url: ENV["ELASTICSEARCH_URL"],
948
+ transport_options: {request: {timeout: 10}}
949
+ ) do |f|
950
+ f.request :aws_signers_v4, {
951
+ credentials: Aws::Credentials.new(ENV["AWS_ACCESS_KEY_ID"], ENV["AWS_SECRET_ACCESS_KEY"]),
952
+ service_name: "es",
953
+ region: "us-east-1"
954
+ }
955
+ end
932
956
  ```
933
957
 
934
958
  Then deploy and reindex:
@@ -976,7 +1000,7 @@ Create an initializer `config/initializers/elasticsearch.rb` with multiple hosts
976
1000
  Searchkick.client = Elasticsearch::Client.new(hosts: ["localhost:9200", "localhost:9201"], retry_on_failure: true)
977
1001
  ```
978
1002
 
979
- See [elasticsearch-transport](https://github.com/elasticsearch/elasticsearch-ruby/blob/master/elasticsearch-transport) for a complete list of options.
1003
+ See [elasticsearch-transport](https://github.com/elastic/elasticsearch-ruby/blob/master/elasticsearch-transport) for a complete list of options.
980
1004
 
981
1005
  ### Lograge
982
1006
 
@@ -994,7 +1018,7 @@ See [Production Rails](https://github.com/ankane/production_rails) for other goo
994
1018
 
995
1019
  ## Advanced
996
1020
 
997
- Prefer to use the [Elasticsearch DSL](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-queries.html) but still want awesome features like zero-downtime reindexing?
1021
+ Prefer to use the [Elasticsearch DSL](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-queries.html) but still want awesome features like zero-downtime reindexing?
998
1022
 
999
1023
  ### Advanced Mapping
1000
1024
 
@@ -1147,7 +1171,7 @@ class Product < ActiveRecord::Base
1147
1171
  end
1148
1172
  ```
1149
1173
 
1150
- Use [Okapi BM25](https://www.elastic.co/guide/en/elasticsearch/guide/current/pluggable-similarites.html) for ranking [master]
1174
+ Use [Okapi BM25](https://www.elastic.co/guide/en/elasticsearch/guide/current/pluggable-similarites.html) for ranking
1151
1175
 
1152
1176
  ```ruby
1153
1177
  class Product < ActiveRecord::Base
@@ -1218,7 +1242,7 @@ Product.search "ah", misspellings: {prefix_length: 2} # ah, no aha
1218
1242
 
1219
1243
  ## Large Data Sets
1220
1244
 
1221
- For large data sets, check out [Keeping Elasticsearch in Sync](https://www.found.no/foundation/keeping-elasticsearch-in-sync/). Searchkick will make this easy in the future.
1245
+ For large data sets, check out [Keeping Elasticsearch in Sync](https://www.elastic.co/blog/found-keeping-elasticsearch-in-sync). Searchkick will make this easy in the future.
1222
1246
 
1223
1247
  ## Testing
1224
1248
 
@@ -1314,7 +1338,7 @@ Before `0.3.0`, locations were indexed incorrectly. When upgrading, be sure to r
1314
1338
 
1315
1339
  ### Inconsistent Scores
1316
1340
 
1317
- Due to the distributed nature of Elasticsearch, you can get incorrect results when the number of documents in the index is low. You can [read more about it here](http://www.elasticsearch.org/blog/understanding-query-then-fetch-vs-dfs-query-then-fetch/). To fix this, do:
1341
+ Due to the distributed nature of Elasticsearch, you can get incorrect results when the number of documents in the index is low. You can [read more about it here](https://www.elastic.co/blog/understanding-query-then-fetch-vs-dfs-query-then-fetch). To fix this, do:
1318
1342
 
1319
1343
  ```ruby
1320
1344
  class Product < ActiveRecord::Base
@@ -568,10 +568,11 @@ module Searchkick
568
568
  # locations
569
569
  (options[:locations] || []).map(&:to_s).each do |field|
570
570
  if source[field]
571
- if source[field].first.is_a?(Array) # array of arrays
572
- source[field] = source[field].map { |a| a.map(&:to_f).reverse }
571
+ if !source[field].is_a?(Hash) && (source[field].first.is_a?(Array) || source[field].first.is_a?(Hash))
572
+ # multiple locations
573
+ source[field] = source[field].map { |a| location_value(a) }
573
574
  else
574
- source[field] = source[field].map(&:to_f).reverse
575
+ source[field] = location_value(source[field])
575
576
  end
576
577
  end
577
578
  end
@@ -581,6 +582,16 @@ module Searchkick
581
582
  source.as_json
582
583
  end
583
584
 
585
+ def location_value(value)
586
+ if value.is_a?(Array)
587
+ value.map(&:to_f).reverse
588
+ elsif value.is_a?(Hash)
589
+ {lat: value[:lat].to_f, lon: value[:lon].to_f}
590
+ else
591
+ value
592
+ end
593
+ end
594
+
584
595
  # change all BigDecimal values to floats due to
585
596
  # https://github.com/rails/rails/issues/6033
586
597
  # possible loss of precision :/
@@ -599,7 +599,7 @@ module Searchkick
599
599
  when :near
600
600
  filters << {
601
601
  geo_distance: {
602
- field => op_value.map(&:to_f).reverse,
602
+ field => location_value(op_value),
603
603
  distance: value[:within] || "50mi"
604
604
  }
605
605
  }
@@ -607,8 +607,8 @@ module Searchkick
607
607
  filters << {
608
608
  geo_bounding_box: {
609
609
  field => {
610
- top_left: op_value.map(&:to_f).reverse,
611
- bottom_right: value[:bottom_right].map(&:to_f).reverse
610
+ top_left: location_value(op_value),
611
+ bottom_right: location_value(value[:bottom_right])
612
612
  }
613
613
  }
614
614
  }
@@ -699,6 +699,14 @@ module Searchkick
699
699
  end
700
700
  end
701
701
 
702
+ def location_value(value)
703
+ if value.is_a?(Array)
704
+ value.map(&:to_f).reverse
705
+ else
706
+ value
707
+ end
708
+ end
709
+
702
710
  def below12?
703
711
  below_version?("1.2.0")
704
712
  end
@@ -1,3 +1,3 @@
1
1
  module Searchkick
2
- VERSION = "1.1.0"
2
+ VERSION = "1.1.1"
3
3
  end
@@ -226,8 +226,8 @@ class Product
226
226
  serializable_hash.except("id").merge(
227
227
  conversions: conversions,
228
228
  user_ids: user_ids,
229
- location: [latitude, longitude],
230
- multiple_locations: [[latitude, longitude], [0, 0]],
229
+ location: {lat: latitude, lon: longitude},
230
+ multiple_locations: [{lat: latitude, lon: longitude}, {lat: 0, lon: 0}],
231
231
  aisle: aisle
232
232
  )
233
233
  end
@@ -111,6 +111,14 @@ class WhereTest < Minitest::Test
111
111
  assert_search "san", ["San Francisco"], where: {location: {near: [37.5, -122.5]}}
112
112
  end
113
113
 
114
+ def test_near_hash
115
+ store [
116
+ {name: "San Francisco", latitude: 37.7833, longitude: -122.4167},
117
+ {name: "San Antonio", latitude: 29.4167, longitude: -98.5000}
118
+ ]
119
+ assert_search "san", ["San Francisco"], where: {location: {near: {lat: 37.5, lon: -122.5}}}
120
+ end
121
+
114
122
  def test_near_within
115
123
  store [
116
124
  {name: "San Francisco", latitude: 37.7833, longitude: -122.4167},
@@ -120,6 +128,15 @@ class WhereTest < Minitest::Test
120
128
  assert_search "san", ["San Francisco", "San Antonio"], where: {location: {near: [37, -122], within: "2000mi"}}
121
129
  end
122
130
 
131
+ def test_near_within_hash
132
+ store [
133
+ {name: "San Francisco", latitude: 37.7833, longitude: -122.4167},
134
+ {name: "San Antonio", latitude: 29.4167, longitude: -98.5000},
135
+ {name: "San Marino", latitude: 43.9333, longitude: 12.4667}
136
+ ]
137
+ assert_search "san", ["San Francisco", "San Antonio"], where: {location: {near: {lat: 37, lon: -122}, within: "2000mi"}}
138
+ end
139
+
123
140
  def test_top_left_bottom_right
124
141
  store [
125
142
  {name: "San Francisco", latitude: 37.7833, longitude: -122.4167},
@@ -128,6 +145,14 @@ class WhereTest < Minitest::Test
128
145
  assert_search "san", ["San Francisco"], where: {location: {top_left: [38, -123], bottom_right: [37, -122]}}
129
146
  end
130
147
 
148
+ def test_top_left_bottom_right_hash
149
+ store [
150
+ {name: "San Francisco", latitude: 37.7833, longitude: -122.4167},
151
+ {name: "San Antonio", latitude: 29.4167, longitude: -98.5000}
152
+ ]
153
+ assert_search "san", ["San Francisco"], where: {location: {top_left: {lat: 38, lon: -123}, bottom_right: {lat: 37, lon: -122}}}
154
+ end
155
+
131
156
  def test_multiple_locations
132
157
  store [
133
158
  {name: "San Francisco", latitude: 37.7833, longitude: -122.4167},
@@ -135,4 +160,12 @@ class WhereTest < Minitest::Test
135
160
  ]
136
161
  assert_search "san", ["San Francisco"], where: {multiple_locations: {near: [37.5, -122.5]}}
137
162
  end
163
+
164
+ def test_multiple_locations_hash
165
+ store [
166
+ {name: "San Francisco", latitude: 37.7833, longitude: -122.4167},
167
+ {name: "San Antonio", latitude: 29.4167, longitude: -98.5000}
168
+ ]
169
+ assert_search "san", ["San Francisco"], where: {multiple_locations: {near: {lat: 37.5, lon: -122.5}}}
170
+ end
138
171
  end
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: 1.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-08 00:00:00.000000000 Z
11
+ date: 2015-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -174,7 +174,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
174
174
  version: '0'
175
175
  requirements: []
176
176
  rubyforge_project:
177
- rubygems_version: 2.4.5
177
+ rubygems_version: 2.4.5.1
178
178
  signing_key:
179
179
  specification_version: 4
180
180
  summary: Searchkick learns what your users are looking for. As more people search,
@@ -216,4 +216,3 @@ test_files:
216
216
  - test/synonyms_test.rb
217
217
  - test/test_helper.rb
218
218
  - test/where_test.rb
219
- has_rdoc: