searchkick 0.3.4 → 0.3.5

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: d67265d1ad299d9e79b7f1020197f3b12f551535
4
- data.tar.gz: b72d9fb064fad2f904db6d2cf69e9be96fb8c44e
3
+ metadata.gz: c8a8a68edbdd1ac1b03fc9fa7396391082a13a64
4
+ data.tar.gz: 9933087ad09633fbb2b9b0607fc2ec591a62e35b
5
5
  SHA512:
6
- metadata.gz: 7ec7b5537539de163009b0857bd84a78829a0520b55b1f77544d0a65dee789dfce467b7afc63aa4aa54327d87be1dc3954178d3d209a35bb92e47c5179ad53a3
7
- data.tar.gz: c9710769dd1045f5e8cfb1cd4cc86242df365289d28409bf8c47fe19e3b829b6d5b7ab6bed8ba890e56189ececacad520280c0940651bb2d8cdb2a0f78ac1356
6
+ metadata.gz: edbfccd85651bbfb32c13a8c7de4ea15663cc0ff04fcc03969d7268d2c365b59e7272045541b116e9bb0234d8e5976190265d699d6549cc0a6710489927638f6
7
+ data.tar.gz: eea0fe79ae6396f7c07769a3437640162ded10494600bc69179403e2f11609a9c24609c4eaa08dd287840328417d54323850657fd7791f51212aa287549e6993
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 0.3.5
2
+
3
+ - Added facet ranges
4
+ - Add all operator
5
+
1
6
  ## 0.3.4
2
7
 
3
8
  - Added highlighting
data/README.md CHANGED
@@ -87,6 +87,7 @@ where: {
87
87
  aisle_id: [25, 30], # in
88
88
  store_id: {not: 2}, # not
89
89
  aisle_id: {not: [25, 30]}, # not in
90
+ user_ids: {all: [1, 3]}, # all elements in array
90
91
  or: [
91
92
  [{in_stock: true}, {backordered: true}]
92
93
  ]
@@ -111,6 +112,14 @@ Boost by a field
111
112
  boost: "orders_count" # give popular documents a little boost
112
113
  ```
113
114
 
115
+ ### Get Everything
116
+
117
+ Use a `*` for the query.
118
+
119
+ ```ruby
120
+ Product.search "*"
121
+ ```
122
+
114
123
  ### Pagination
115
124
 
116
125
  Plays nicely with kaminari and will_paginate.
@@ -348,6 +357,13 @@ Advanced
348
357
  Product.search "2% Milk", facets: {store_id: {where: {in_stock: true}, limit: 10}}
349
358
  ```
350
359
 
360
+ Ranges
361
+
362
+ ```ruby
363
+ price_ranges = [{to: 20}, {from: 20, to: 50}, {from: 50}]
364
+ Product.search "*", facets: {price: {ranges: price_ranges}}
365
+ ```
366
+
351
367
  ### Highlight
352
368
 
353
369
  Highlight the search query in the results.
@@ -407,6 +423,29 @@ Bounded by a box
407
423
  City.search "san", where: {location: {top_left: [38, -123], bottom_right: [37, -122]}}
408
424
  ```
409
425
 
426
+ ## Inheritance
427
+
428
+ Searchkick supports single table inheritance.
429
+
430
+ ```ruby
431
+ class Dog < Animal
432
+ end
433
+ ```
434
+
435
+ The parent and child model can both reindex.
436
+
437
+ ```ruby
438
+ Animal.reindex
439
+ Dog.reindex # equivalent
440
+ ```
441
+
442
+ And to search, use:
443
+
444
+ ```ruby
445
+ Animal.search "*" # all animals
446
+ Dog.search "*" # just dogs
447
+ ```
448
+
410
449
  ## Deployment
411
450
 
412
451
  Searchkick uses `ENV["ELASTICSEARCH_URL"]` for the Elasticsearch server. This defaults to `http://localhost:9200`.
@@ -449,29 +488,6 @@ Then deploy and reindex:
449
488
  rake searchkick:reindex CLASS=Product
450
489
  ```
451
490
 
452
- ## Inheritance
453
-
454
- Searchkick supports single table inheritance.
455
-
456
- ```ruby
457
- class Dog < Animal
458
- end
459
- ```
460
-
461
- The parent and child model can both reindex.
462
-
463
- ```ruby
464
- Animal.reindex
465
- Dog.reindex # equivalent
466
- ```
467
-
468
- And to search, use:
469
-
470
- ```ruby
471
- Animal.search "*" # all animals
472
- Dog.search "*" # just dogs
473
- ```
474
-
475
491
  ## Reference
476
492
 
477
493
  Searchkick requires Elasticsearch `0.90.0` or higher.
@@ -201,6 +201,8 @@ module Searchkick
201
201
  else
202
202
  filters << {not: {term: {field => op_value}}}
203
203
  end
204
+ elsif op == :all
205
+ filters << {terms: {field => op_value, execution: "and"}}
204
206
  else
205
207
  range_query =
206
208
  case op
@@ -250,12 +252,22 @@ module Searchkick
250
252
  facets.each do |field, facet_options|
251
253
  # ask for extra facets due to
252
254
  # https://github.com/elasticsearch/elasticsearch/issues/1305
253
- payload[:facets][field] = {
254
- terms: {
255
- field: field,
256
- size: facet_options[:limit] ? facet_options[:limit] + 150 : 100000
255
+
256
+ if facet_options[:ranges]
257
+ payload[:facets][field] = {
258
+ range: {
259
+ field.to_sym => facet_options[:ranges]
260
+ }
257
261
  }
258
- }
262
+ else
263
+ payload[:facets][field] = {
264
+ terms: {
265
+ field: field,
266
+ size: facet_options[:limit] ? facet_options[:limit] + 150 : 100000
267
+ }
268
+ }
269
+ end
270
+
259
271
  facet_limits[field] = facet_options[:limit] if facet_options[:limit]
260
272
 
261
273
  # offset is not possible
@@ -1,3 +1,3 @@
1
1
  module Searchkick
2
- VERSION = "0.3.4"
2
+ VERSION = "0.3.5"
3
3
  end
data/test/facets_test.rb CHANGED
@@ -5,9 +5,9 @@ class TestFacets < Minitest::Unit::TestCase
5
5
  def setup
6
6
  super
7
7
  store [
8
- {name: "Product Show", store_id: 1, in_stock: true, color: "blue"},
9
- {name: "Product Hide", store_id: 2, in_stock: false, color: "green"},
10
- {name: "Product B", store_id: 2, in_stock: false, color: "red"}
8
+ {name: "Product Show", store_id: 1, in_stock: true, color: "blue", price: 21},
9
+ {name: "Product Hide", store_id: 2, in_stock: false, color: "green", price: 25},
10
+ {name: "Product B", store_id: 2, in_stock: false, color: "red", price: 5}
11
11
  ]
12
12
  end
13
13
 
@@ -26,4 +26,15 @@ class TestFacets < Minitest::Unit::TestCase
26
26
  assert_equal 1, facet["other"]
27
27
  end
28
28
 
29
+ def test_ranges
30
+ price_ranges = [{to: 10}, {from: 10, to: 20}, {from: 20}]
31
+ facet = Product.search("Product", facets: {price: {ranges: price_ranges}}).facets["price"]
32
+
33
+ assert_equal 3, facet["ranges"].size
34
+ assert_equal 10.0, facet["ranges"][0]["to"]
35
+ assert_equal 20.0, facet["ranges"][2]["from"]
36
+ assert_equal 1, facet["ranges"][0]["count"]
37
+ assert_equal 0, facet["ranges"][1]["count"]
38
+ assert_equal 2, facet["ranges"][2]["count"]
39
+ end
29
40
  end
data/test/sql_test.rb CHANGED
@@ -39,7 +39,7 @@ class TestSql < Minitest::Unit::TestCase
39
39
  now = Time.now
40
40
  store [
41
41
  {name: "Product A", store_id: 1, in_stock: true, backordered: true, created_at: now, orders_count: 4, user_ids: [1, 2, 3]},
42
- {name: "Product B", store_id: 2, in_stock: true, backordered: false, created_at: now - 1, orders_count: 3},
42
+ {name: "Product B", store_id: 2, in_stock: true, backordered: false, created_at: now - 1, orders_count: 3, user_ids: [1]},
43
43
  {name: "Product C", store_id: 3, in_stock: false, backordered: true, created_at: now - 2, orders_count: 2},
44
44
  {name: "Product D", store_id: 4, in_stock: false, backordered: false, created_at: now - 3, orders_count: 1},
45
45
  ]
@@ -64,15 +64,16 @@ class TestSql < Minitest::Unit::TestCase
64
64
  assert_search "product", ["Product A", "Product B", "Product C"], where: {or: [[{in_stock: true}, {store_id: 3}]]}
65
65
  assert_search "product", ["Product A", "Product B", "Product C"], where: {or: [[{orders_count: [2, 4]}, {store_id: [1, 2]}]]}
66
66
  assert_search "product", ["Product A", "Product D"], where: {or: [[{orders_count: 1}, {created_at: {gte: now - 1}, backordered: true}]]}
67
- # array
68
- assert_search "product", ["Product A"], where: {user_ids: 2}
67
+ # all
68
+ assert_search "product", ["Product A"], where: {user_ids: {all: [1, 3]}}
69
+ assert_search "product", [], where: {user_ids: {all: [1, 2, 3, 4]}}
69
70
  end
70
71
 
71
72
  def test_where_string
72
73
  store [
73
74
  {name: "Product A", color: "RED"}
74
75
  ]
75
- assert_search "product", ["Product A"], where: {color: ["RED"]}
76
+ assert_search "product", ["Product A"], where: {color: "RED"}
76
77
  end
77
78
 
78
79
  def test_where_nil
@@ -83,6 +84,12 @@ class TestSql < Minitest::Unit::TestCase
83
84
  assert_search "product", ["Product A"], where: {color: nil}
84
85
  end
85
86
 
87
+ def test_where_id
88
+ store_names ["Product A"]
89
+ product = Product.last
90
+ assert_search "product", ["Product A"], where: {id: product.id}
91
+ end
92
+
86
93
  def test_near
87
94
  store [
88
95
  {name: "San Francisco", latitude: 37.7833, longitude: -122.4167},
data/test/test_helper.rb CHANGED
@@ -53,6 +53,7 @@ else
53
53
  t.boolean :in_stock
54
54
  t.boolean :backordered
55
55
  t.integer :orders_count
56
+ t.integer :price
56
57
  t.string :color
57
58
  t.decimal :latitude, precision: 10, scale: 7
58
59
  t.decimal :longitude, precision: 10, scale: 7
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.3.4
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-22 00:00:00.000000000 Z
11
+ date: 2013-12-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tire