elastic-rails 0.6.0 → 0.6.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a85d4715234d67d4dac798756ad8c63b62b8aeb2
4
- data.tar.gz: fa4bb1a83eae9d73ab8c1ce7717f4232922bd6f0
3
+ metadata.gz: c0f277dfbb48f36dd5d37aec9678897754b6b348
4
+ data.tar.gz: 4f799186d83a23ab54aff5c11fcb482c461536e5
5
5
  SHA512:
6
- metadata.gz: c95fda8f2273c68285ee7bfc02c7f5b01bceccdfef74c3ad2dfa86d8d5cd27420a4c4598c608ba535900c2268030dea3ced38bbed62db35a6b0f037c3630866d
7
- data.tar.gz: 1600194a988639918c4810d0bfebf9be14c24c9b9f78eb2ed64b9f64ed8e46ae82c03c2b38d8c563f229f42910c2823284ec8fafd34097ff8bd41f1b77484c10
6
+ metadata.gz: 2a1ed07c2514ef377743f87b8761b1e4005529a56781e6441219e9010a98e9edb63b715d7dfdbeb641e0f058da8251d2a58a9b9bab0ef86f8ad96b40f82d7432
7
+ data.tar.gz: 86955585a269003324f70a85fea21bcffcd4fb284a3c50655bc078958c0b845569f5ea2f7b4c6978b1dfd78925d4bf579cefa84ebf1a9cbd7634bc5b244a5d9e
data/README.md CHANGED
@@ -9,7 +9,7 @@ TODO: Delete this and the text above, and describe your gem
9
9
  Add this line to your application's Gemfile:
10
10
 
11
11
  ```ruby
12
- gem 'elastic'
12
+ gem 'elastic-rails'
13
13
  ```
14
14
 
15
15
  And then execute:
@@ -18,10 +18,49 @@ And then execute:
18
18
 
19
19
  Or install it yourself as:
20
20
 
21
- $ gem install elastic
21
+ $ gem install elastic-rails
22
+
23
+ Finally execute the initialization script:
24
+
25
+ $ rails g es:init
22
26
 
23
27
  ## Usage
24
28
 
29
+ Start by creating an index over a model (You can also index non-activerecord objects)
30
+
31
+ rails g es:index Bike
32
+
33
+ This will generate a new index definition file in `app/indices`
34
+
35
+ Add some fields to the index
36
+
37
+ TODO
38
+
39
+ Every time you create or change and index you will neeed to synchronize the Elasticsearch index mappings:
40
+
41
+ rake es:migrate
42
+
43
+ If you already have some data that needs to be indexed then run the reindex task:
44
+
45
+ rake es:reindex
46
+
47
+ To add additional data call the index `import` or the model's `index_now` or `index_later` methods:
48
+
49
+ ```ruby
50
+ some_bike.index_now # this will reindex only one record
51
+ some_bike.index_later # this will queue a reindexing job on the record
52
+ BikeIndex.import([bike_1, bike_2, bike_3]) # this will perform a bulk insertion
53
+ ```
54
+
55
+ After some data has been added you can start searching:
56
+
57
+ ```ruby
58
+ BikeIndex.must(brand: 'Trek', size: 'M').should(year: { gte: 2015 }).avg(:price)
59
+
60
+ BikeIndex.must(origin: 'China').segment(:brand).each { |brand, bikes| }
61
+ ```
62
+
63
+
25
64
  TODO: Write usage instructions here
26
65
 
27
66
  ## Development
@@ -1,6 +1,6 @@
1
1
  module Elastic::Commands
2
2
  class ImportIndexDocuments < Elastic::Support::Command.new(
3
- :index, collection: nil, cache_size: 10000, verbose: false
3
+ :index, collection: nil, batch_size: 10000, verbose: false
4
4
  )
5
5
  def perform
6
6
  if collection.present?
@@ -27,7 +27,7 @@ module Elastic::Commands
27
27
 
28
28
  def queue(_object)
29
29
  cache << render_for_es(_object)
30
- flush if cache.length >= cache_size
30
+ flush if cache.length >= batch_size
31
31
  end
32
32
 
33
33
  def flush
@@ -4,7 +4,8 @@ module Elastic
4
4
  host: '127.0.0.1',
5
5
  port: 9200,
6
6
  page_size: 20,
7
- coord_similarity: true
7
+ coord_similarity: true,
8
+ import_batch_size: 10_000
8
9
  }
9
10
 
10
11
  extend self
@@ -47,6 +48,10 @@ module Elastic
47
48
  @config[:logger] || default_logger
48
49
  end
49
50
 
51
+ def import_batch_size
52
+ @config[:import_batch_size]
53
+ end
54
+
50
55
  private
51
56
 
52
57
  def config
@@ -67,7 +67,10 @@ module Elastic::Core
67
67
  { 'index' => doc.merge('_index' => index_name) }
68
68
  end
69
69
 
70
- api_client.bulk body: body
70
+ retry_on_temporary_error('bulk indexing') do
71
+ api_client.bulk body: body
72
+ end
73
+
71
74
  self
72
75
  end
73
76
 
@@ -90,6 +93,17 @@ module Elastic::Core
90
93
 
91
94
  private
92
95
 
96
+ def retry_on_temporary_error(_action, retries: 3)
97
+ return yield
98
+ rescue Elasticsearch::Transport::Transport::Errors::ServiceUnavailable,
99
+ Elasticsearch::Transport::Transport::Errors::GatewayTimeout => exc
100
+ raise if retries <= 0
101
+
102
+ Configuration.logger.warn("#{exc.class} error during '#{_action}', retrying!")
103
+ retries -= 1
104
+ retry
105
+ end
106
+
93
107
  def api_client
94
108
  Elastic::Configuration.api_client
95
109
  end
data/lib/elastic/type.rb CHANGED
@@ -18,6 +18,14 @@ module Elastic
18
18
  @suffix = _value
19
19
  end
20
20
 
21
+ def self.import_batch_size
22
+ @import_batch_size || Configuration.import_batch_size
23
+ end
24
+
25
+ def self.import_batch_size=(_value)
26
+ @import_batch_size = _value
27
+ end
28
+
21
29
  def self.adaptor
22
30
  @adaptor ||= Elastic::Core::Adaptor.new(suffix)
23
31
  end
@@ -26,17 +34,31 @@ module Elastic
26
34
  @mapping ||= load_mapping
27
35
  end
28
36
 
29
- def self.reindex(verbose: true)
37
+ def self.reindex(verbose: true, batch_size: nil)
30
38
  drop
31
39
  mapping.migrate
32
- Commands::ImportIndexDocuments.for index: self, verbose: verbose
40
+ batch_size = batch_size || import_batch_size
41
+
42
+ Commands::ImportIndexDocuments.for(
43
+ index: self,
44
+ verbose: verbose,
45
+ batch_size: batch_size
46
+ )
47
+
33
48
  ensure_full_mapping
34
49
  self
35
50
  end
36
51
 
37
- def self.import(_collection)
52
+ def self.import(_collection, batch_size: nil)
38
53
  enforce_mapping!
39
- Commands::ImportIndexDocuments.for index: self, collection: _collection
54
+ batch_size = batch_size || import_batch_size
55
+
56
+ Commands::ImportIndexDocuments.for(
57
+ index: self,
58
+ collection: _collection,
59
+ batch_size: batch_size
60
+ )
61
+
40
62
  ensure_full_mapping
41
63
  self
42
64
  end
@@ -1,3 +1,3 @@
1
1
  module Elastic
2
- VERSION = "0.6.0"
2
+ VERSION = "0.6.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elastic-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ignacio Baixas
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-08-16 00:00:00.000000000 Z
11
+ date: 2016-08-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: elasticsearch