search_flip 2.3.2 → 3.0.0.beta

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
  SHA256:
3
- metadata.gz: b35fa0a26656805611e1f40be7cf17a80a9e5b307b45eeecca1fe7307ab4c3ec
4
- data.tar.gz: 20103b3bf9a10635d9b43885895b9f046ffc72b36c7b1ebd125d0033571a7d6e
3
+ metadata.gz: f16c0308f14d764aab7fa477c8ba4169bf7d493e774cd8f435d8fa0ecd9ce991
4
+ data.tar.gz: 7a91d1a23b846eb17466369d82ec5583b6346d237037cd12c0cd8e036df2498d
5
5
  SHA512:
6
- metadata.gz: 6f894a1fbdc3f62adc190da4de5446a41dfe69a4f4cc717cba45660719790f79a65dad0d4016aed0a4fd197bd90bc71d62b2a9e99efaf3767feec95739abdfc1
7
- data.tar.gz: 480eb7a2c092bd2f6dd53ffb11aeb888310ba2cf0e73827532e9b29bc151462748a0b69f09a02165785eb9d554c4b1d1677c97dc03211d3026612b2b008d662a
6
+ metadata.gz: e5ccd27acffd9cd2e91a66c3b4e99c9fb09d30d8c720785cedaf233ba314e28d2317c331fc7d63a29ef29d9951bd071d8ed849ffd0e3486e6890d428b3c94317
7
+ data.tar.gz: a7f5b2f4969d7daa6aa578f4a31588b263f44f7e48aa4729bc820032923b804254cb0ad941dc961b8f36c508f07b27ef2ac7198802b02db2385cd1487b32cdc8
data/.rubocop.yml CHANGED
@@ -1,23 +1,35 @@
1
- Style/FrozenStringLiteralComment:
1
+ Style/HashTransformValues:
2
+ Enabled: false
3
+
4
+ Style/HashTransformKeys:
2
5
  Enabled: false
3
6
 
4
- Style/UnneededPercentQ:
7
+ Style/HashEachMethods:
8
+ Enabled: true
9
+
10
+ Style/FrozenStringLiteralComment:
5
11
  Enabled: false
6
12
 
7
- Style/BracesAroundHashParameters:
13
+ Lint/RedundantRequireStatement:
8
14
  Enabled: false
9
15
 
16
+ Layout/ArgumentAlignment:
17
+ EnforcedStyle: with_fixed_indentation
18
+
19
+ Layout/FirstArrayElementIndentation:
20
+ EnforcedStyle: consistent
21
+
10
22
  Style/PercentLiteralDelimiters:
11
23
  Enabled: false
12
24
 
13
25
  Style/SpecialGlobalVars:
14
- Enabled: false
26
+ EnforcedStyle: use_english_names
15
27
 
16
28
  Security/Eval:
17
29
  Enabled: false
18
30
 
19
31
  Style/WordArray:
20
- Enabled: false
32
+ EnforcedStyle: brackets
21
33
 
22
34
  Style/ClassAndModuleChildren:
23
35
  Enabled: false
@@ -34,19 +46,16 @@ Style/StringLiteralsInInterpolation:
34
46
  Metrics/ClassLength:
35
47
  Enabled: false
36
48
 
37
- Naming/UncommunicativeMethodParamName:
49
+ Naming/MethodParameterName:
38
50
  Enabled: false
39
51
 
40
52
  Style/SymbolArray:
41
- Enabled: false
53
+ EnforcedStyle: brackets
42
54
 
43
55
  Layout/RescueEnsureAlignment:
44
56
  Enabled: false
45
57
 
46
- Layout/LeadingBlankLines:
47
- Enabled: false
48
-
49
- Metrics/LineLength:
58
+ Layout/LineLength:
50
59
  Enabled: false
51
60
 
52
61
  Metrics/MethodLength:
@@ -58,9 +67,6 @@ Metrics/ModuleLength:
58
67
  Style/ZeroLengthPredicate:
59
68
  Enabled: false
60
69
 
61
- Layout/TrailingBlankLines:
62
- Enabled: false
63
-
64
70
  Metrics/PerceivedComplexity:
65
71
  Enabled: false
66
72
 
@@ -100,20 +106,14 @@ Style/MutableConstant:
100
106
  Layout/MultilineMethodCallIndentation:
101
107
  EnforcedStyle: indented
102
108
 
103
- Layout/AlignParameters:
109
+ Layout/ParameterAlignment:
104
110
  EnforcedStyle: with_fixed_indentation
105
111
 
106
112
  Lint/UnusedMethodArgument:
107
113
  Enabled: false
108
114
 
109
- Layout/IndentArray:
110
- EnforcedStyle: consistent
111
-
112
115
  Style/IfUnlessModifier:
113
116
  Enabled: false
114
117
 
115
118
  Style/RedundantBegin:
116
119
  Enabled: false
117
-
118
- Style/OptionalArguments:
119
- Enabled: false
data/.travis.yml CHANGED
@@ -1,8 +1,6 @@
1
-
2
1
  sudo: false
3
2
  language: ruby
4
3
  env:
5
- - ES_IMAGE=elasticsearch:1
6
4
  - ES_IMAGE=plainpicture/elasticsearch:2.4.1_delete-by-query
7
5
  - ES_IMAGE=elasticsearch:5.4
8
6
  - ES_IMAGE=docker.elastic.co/elasticsearch/elasticsearch:6.7.0
@@ -10,11 +8,11 @@ env:
10
8
  - ES_IMAGE=docker.elastic.co/elasticsearch/elasticsearch:7.4.0
11
9
  rvm:
12
10
  - ruby-2.6.2
13
- - ruby-2.7.1
14
11
  before_install:
15
12
  - docker-compose up -d
16
13
  - sleep 10
17
14
  install:
18
15
  - travis_retry bundle install
19
- script: rspec
20
-
16
+ script:
17
+ - bundle exec rspec
18
+ - bundle exec rubocop
data/CHANGELOG.md CHANGED
@@ -1,24 +1,40 @@
1
1
 
2
2
  # CHANGELOG
3
3
 
4
- ## v2.3.2
4
+ ## v3.0.0
5
5
 
6
- * Remove ruby 2.7 warnings
6
+ * Added `Criteria#to_query`, which returns a raw query including all queries
7
+ and filters, including the post filters
8
+ * Added `Criteria#all`
9
+ * [BREAKING] Support for elasticsearch 1.x has been removed
10
+ * [BREAKING] No longer pass multiple arguments to `#must`, `#must_not`,
11
+ `#filter`, `#should`, `#post_must`, `#post_must_not`, `#post_filter`, and
12
+ `#post_should`. Pass an array of arguments instead: `.post_must([...])`
13
+ * [BREAKING] `#should` and `#post_should` is now equivalent to
14
+ `.must(bool: { should: ... })` and `.post_must(bool: { should: ... })`,
15
+ * [BREAKING] `#unscope` is removed
16
+ * [BREAKING] `SearchFlip::Connection#get_aliases` no longer returns a
17
+ Hashie::Mash, but a raw Hash as was already stated in the docs
18
+ * `#post_where` and `#post_where_not` now handle `nil` values as well:
19
+ `.post_where_not(title: nil)` with `exists/exists not` filters
20
+ * `Connection#cat_indices/get_indices` now accepts additional parameters
21
+ * `Connection#freeze_index`, `Connection#unfreeze_index`, `Index#freeze_index`
22
+ and `Index#unfreeze_index` added
7
23
 
8
24
  ## v2.3.1
9
25
 
10
- * Make search_flip work with hashie 4.0.0
26
+ * Make `search_flip` work with hashie 4.0.0
11
27
 
12
28
  ## v2.3.0
13
29
 
14
30
  * [DEPRECATED] `SearchFlip::Criteria#should` is deprecated and will become
15
- equivalent to `.must(bool: { should: ... })` in search_flip 3
31
+ equivalent to `.must(bool: { should: ... })` in `search_flip` 3
16
32
  * Added `SearchFlip::Criteria#explain`
17
33
 
18
34
  ## v2.2.0
19
35
 
20
36
  * [DEPRECATED] `SearchFlip::Criteria#unscope` is deprecated and will be removed
21
- in search_flip 3
37
+ in `search_flip` 3
22
38
  * Added `SearchFlip::Criteria#track_total_hits`
23
39
 
24
40
  ## v2.1.0
data/Gemfile CHANGED
@@ -1,7 +1,5 @@
1
-
2
1
  source "https://rubygems.org"
3
2
 
4
3
  gemspec
5
4
 
6
5
  gem "activerecord", "< 5" if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("2.2.2")
7
-
data/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
  Using SearchFlip it is dead-simple to create index classes that correspond to
10
10
  [Elasticsearch](https://www.elastic.co/) indices and to manipulate, query and
11
11
  aggregate these indices using a chainable, concise, yet powerful DSL. Finally,
12
- SearchFlip supports Elasticsearch 1.x, 2.x, 5.x, 6.x, 7.x. Check section
12
+ SearchFlip supports Elasticsearch 2.x, 5.x, 6.x, 7.x. Check section
13
13
  [Feature Support](#feature-support) for version dependent features.
14
14
 
15
15
  ```ruby
@@ -245,7 +245,6 @@ CommentIndex.search("hello world").sort(id: "desc").aggregate(:username).request
245
245
  # => {:query=>{:bool=>{:must=>[{:query_string=>{:query=>"hello world", :default_operator=>:AND}}]}}, ...}
246
246
  ```
247
247
 
248
-
249
248
  Delete records:
250
249
 
251
250
  ```ruby
@@ -335,7 +334,7 @@ CommentIndex.where(state: ["approved", "rejected"])
335
334
 
336
335
  * `where_not`
337
336
 
338
- The `.where_not` method is like `,where`, but excluding the matching documents:
337
+ The `.where_not` method is like `.where`, but excluding the matching documents:
339
338
 
340
339
  ```ruby
341
340
  CommentIndex.where_not(id: [1, 2, 3])
@@ -362,7 +361,10 @@ CommentIndex.filter(term: { state: "approved" })
362
361
  Use `.should` to add raw should queries:
363
362
 
364
363
  ```ruby
365
- CommentIndex.should(term: { state: "approved" })
364
+ CommentIndex.should([
365
+ { term: { state: "approved" } },
366
+ { term: { user: "mrkamel" } },
367
+ ])
366
368
  ```
367
369
 
368
370
  * `must`
@@ -371,15 +373,6 @@ Use `.must` to add raw must queries:
371
373
 
372
374
  ```ruby
373
375
  CommentIndex.must(term: { state: "approved" })
374
-
375
- CommentIndex.must(
376
- bool: {
377
- should: [
378
- { terms: { state: ["approved", "rejected"] }},
379
- { term: { username: "mrkamel" }}
380
- ]
381
- }
382
- )
383
376
  ```
384
377
 
385
378
  * `must_not`
@@ -426,6 +419,35 @@ Simply matches all documents:
426
419
  CommentIndex.match_all
427
420
  ```
428
421
 
422
+ * `all`
423
+
424
+ Simply returns the criteria as is or an empty criteria when called on the index
425
+ class directly. Useful for chaining.
426
+
427
+ ```ruby
428
+ CommentIndex.all
429
+ ```
430
+
431
+ * `to_query`
432
+
433
+ Sometimes, you want to convert the constraints of a search flip query to a raw
434
+ query to e.g. use it in a should clause:
435
+
436
+ ```ruby
437
+ CommentIndex.should([
438
+ CommentIndex.range(:likes_count, gt: 10).to_query,
439
+ CommentIndex.search("search term").to_query
440
+ ])
441
+ ```
442
+
443
+ It returns all added queries and filters, including post filters as a raw
444
+ query:
445
+
446
+ ```ruby
447
+ CommentIndex.where(state: "new").search("text").to_query
448
+ # => {:bool=>{:filter=>[{:term=>{:state=>"new"}}], :must=>[{:query_string=>{:query=>"text", ...}}]}}
449
+ ```
450
+
429
451
  ### Post Query/Filter Criteria Methods
430
452
 
431
453
  All query/filter criteria methods (`#where`, `#where_not`, `#range`, etc.) are available
@@ -835,15 +857,13 @@ require "search_flip/to_json"
835
857
 
836
858
  ## Feature Support
837
859
 
838
- * `#post_search` and `#profile` are only supported from up to Elasticsearch
839
- version >= 2.
840
860
  * for Elasticsearch 2.x, the delete-by-query plugin is required to delete
841
861
  records via queries
842
862
  * `#track_total_hits` is only available with Elasticsearch >= 7
843
863
 
844
864
  ## Keeping your Models and Indices in Sync
845
865
 
846
- Besides the most basic approach to get you started, SarchFlip currently doesn't
866
+ Besides the most basic approach to get you started, SearchFlip currently doesn't
847
867
  ship with any means to automatically keep your models and indices in sync,
848
868
  because every method is very much bound to the concrete environment and depends
849
869
  on your concrete requirements. In addition, the methods to achieve model/index
data/Rakefile CHANGED
@@ -6,4 +6,3 @@ Rake::TestTask.new(:test) do |t|
6
6
  t.pattern = "test/**/*_test.rb"
7
7
  t.verbose = true
8
8
  end
9
-
data/UPDATING.md CHANGED
@@ -1,6 +1,97 @@
1
1
 
2
2
  # Updating from previous SearchFlip versions
3
3
 
4
+ ## Update 2.x to 3.x
5
+
6
+ * **[BREAKING]** No longer pass multiple arguments to `#must`, `#must_not`,
7
+ `#filter`, `#should`, `#post_must`, `#post_must_not`, `#post_filter`, and
8
+ `#post_should`.
9
+
10
+ 2.x:
11
+
12
+ ```ruby
13
+ CommentIndex.must({ term: { state: "new" } }, { term: { state: "approved" } })
14
+ ```
15
+
16
+ 3.x:
17
+
18
+ ```ruby
19
+ CommentIndex.must([
20
+ { term: { state: "new" } },
21
+ { term: { state: "approved" } }
22
+ ])
23
+ ```
24
+
25
+ Same for `#must_not`, `#filter`, `#should`, etc.
26
+
27
+ * **[BREAKING]** `#should` and `#post_should` is now equivalent to `.must(bool: {
28
+ should: ... })` and `.post_must(bool: { should: ... })`, respectively.
29
+
30
+ No necessary code changes, but different queries will be produced:
31
+
32
+ 2.x:
33
+
34
+ ```ruby
35
+ query = CommentIndex.should([
36
+ { term: { state: "new" } },
37
+ { term: { state: "approved" }}
38
+ ])
39
+
40
+ query = query.should([
41
+ { term: { state: "declined" } },
42
+ { term: { state: "pending" } }
43
+ ])
44
+ ```
45
+
46
+ generated a query matching:
47
+
48
+ `new OR approved OR declined OR pending`
49
+
50
+ 3.x:
51
+
52
+ SearchFlip 3 generates a query matching:
53
+
54
+ `(new OR approved) AND (declined OR pending)`
55
+
56
+ as desired in nearly all cases.
57
+
58
+ * [BREAKING] `#unscope` is removed
59
+
60
+ There is no equivalent replacement, but you can achieve the same by using the
61
+ intermediate queries instead:
62
+
63
+ 2.x:
64
+
65
+ ```ruby
66
+ query1 = CommentIndex.where(price: 0..20).search("some terms")
67
+ query2 = query1.unscope(:search)
68
+ ```
69
+
70
+ 3.x
71
+
72
+ ```ruby
73
+ query1 = CommentIndex.where(price: 0..20)
74
+ query2 = query1.search("some terms")
75
+ ```
76
+
77
+ * **[BREAKING]** `SearchFlip::Connection#get_aliases` no longer returns a
78
+ Hashie::Mash, but a raw Hash as was already stated in the docs
79
+
80
+ Code changes are only neccessary if you use methods related to `Hashie::Mash`
81
+ on the result of `#get_aliases` like e.g.
82
+
83
+ 2.x:
84
+
85
+ ```ruby
86
+ CommentIndex.connection.get_aliases['index_name'].aliases
87
+ ```
88
+
89
+ 3.x:
90
+
91
+ ```ruby
92
+ CommentIndex.connection.get_aliases['index_name']['aliases']
93
+ ```
94
+
4
95
  ## Update 1.x to 2.x
5
96
 
6
97
  * **[BREAKING]** No longer include the `type_name` in `SearchFlip::Index.mapping`
@@ -1,4 +1,3 @@
1
-
2
1
  module SearchFlip
3
2
  # The SearchFlip::Aggregatable mixin provides handy methods for using
4
3
  # the Elasticsearch aggregation framework, which can be chained with
@@ -66,4 +65,3 @@ module SearchFlip
66
65
  end
67
66
  end
68
67
  end
69
-
@@ -1,12 +1,11 @@
1
-
2
1
  module SearchFlip
3
2
  # The SearchFlip::Aggregation class puts together everything
4
3
  # required to use the Elasticsearch aggregation framework via mixins and
5
4
  # adds a method to convert it to a hash format to be used in the request.
6
5
 
7
6
  class Aggregation
8
- include SearchFlip::Filterable
9
- include SearchFlip::Aggregatable
7
+ include Filterable
8
+ include Aggregatable
10
9
 
11
10
  attr_reader :target
12
11
 
@@ -24,22 +23,17 @@ module SearchFlip
24
23
  res = {}
25
24
  res[:aggregations] = aggregation_values if aggregation_values
26
25
 
27
- if must_values || search_values || must_not_values || should_values || filter_values
26
+ if must_values || must_not_values || filter_values
28
27
  if target.connection.version.to_i >= 2
29
28
  res[:filter] = {
30
29
  bool: {}
31
- .merge(must_values || search_values ? { must: (must_values || []) + (search_values || []) } : {})
30
+ .merge(must_values ? { must: must_values } : {})
32
31
  .merge(must_not_values ? { must_not: must_not_values } : {})
33
- .merge(should_values ? { should: should_values } : {})
34
32
  .merge(filter_values ? { filter: filter_values } : {})
35
33
  }
36
34
  else
37
35
  filters = (filter_values || []) + (must_not_values || []).map { |must_not_value| { not: must_not_value } }
38
-
39
- queries = {}
40
- .merge(must_values || search_values ? { must: (must_values || []) + (search_values || []) } : {})
41
- .merge(should_values ? { should: should_values } : {})
42
-
36
+ queries = must_values ? { must: must_values } : {}
43
37
  filters_and_queries = filters + (queries.size > 0 ? [bool: queries] : [])
44
38
 
45
39
  res[:filter] = filters_and_queries.size > 1 ? { and: filters_and_queries } : filters_and_queries.first
@@ -64,8 +58,8 @@ module SearchFlip
64
58
  unsupported_methods = [
65
59
  :profile_value, :failsafe_value, :terminate_after_value, :timeout_value, :offset_value, :limit_value,
66
60
  :scroll_args, :highlight_values, :suggest_values, :custom_value, :source_value, :sort_values,
67
- :includes_values, :preload_values, :eager_load_values, :post_search_values, :post_must_values,
68
- :post_must_not_values, :post_should_values, :post_filter_values, :preference_value,
61
+ :includes_values, :preload_values, :eager_load_values, :post_must_values,
62
+ :post_must_not_values, :post_filter_values, :preference_value,
69
63
  :search_type_value, :routing_value
70
64
  ]
71
65
 
@@ -75,10 +69,8 @@ module SearchFlip
75
69
  end
76
70
  end
77
71
 
78
- aggregation.search_values = (aggregation.search_values || []) + other.search_values if other.search_values
79
72
  aggregation.must_values = (aggregation.must_values || []) + other.must_values if other.must_values
80
73
  aggregation.must_not_values = (aggregation.must_not_values || []) + other.must_not_values if other.must_not_values
81
- aggregation.should_values = (aggregation.should_values || []) + other.should_values if other.should_values
82
74
  aggregation.filter_values = (aggregation.filter_values || []) + other.filter_values if other.filter_values
83
75
 
84
76
  aggregation.aggregation_values = (aggregation.aggregation_values || {}).merge(other.aggregation_values) if other.aggregation_values
@@ -89,7 +81,7 @@ module SearchFlip
89
81
  target.respond_to?(name, *args)
90
82
  end
91
83
 
92
- ruby2_keywords def method_missing(name, *args, &block)
84
+ def method_missing(name, *args, &block)
93
85
  if target.respond_to?(name)
94
86
  merge(target.send(name, *args, &block))
95
87
  else
@@ -108,4 +100,3 @@ module SearchFlip
108
100
  end
109
101
  end
110
102
  end
111
-
@@ -1,4 +1,3 @@
1
-
2
1
  module SearchFlip
3
2
  # @api private
4
3
  #
@@ -87,7 +86,7 @@ module SearchFlip
87
86
  #
88
87
  # @see #index
89
88
 
90
- ruby2_keywords def import(*args)
89
+ def import(*args)
91
90
  index(*args)
92
91
  end
93
92
 
@@ -181,4 +180,3 @@ module SearchFlip
181
180
  end
182
181
  end
183
182
  end
184
-
@@ -1,4 +1,3 @@
1
-
2
1
  module SearchFlip
3
2
  Config = {
4
3
  index_prefix: nil,
@@ -8,4 +7,3 @@ module SearchFlip
8
7
  auto_refresh: false
9
8
  }
10
9
  end
11
-
@@ -1,4 +1,3 @@
1
-
2
1
  module SearchFlip
3
2
  class Connection
4
3
  attr_reader :base_url, :http_client, :bulk_limit, :bulk_max_mb
@@ -106,7 +105,10 @@ module SearchFlip
106
105
  # @return [Hash] The raw response
107
106
 
108
107
  def analyze(request, params = {})
109
- http_client.headers(accept: "application/json").post("#{base_url}/_analyze", json: request, params: params).parse
108
+ http_client
109
+ .headers(accept: "application/json")
110
+ .post("#{base_url}/_analyze", json: request, params: params)
111
+ .parse
110
112
  end
111
113
 
112
114
  # Fetches information about the specified index aliases. Raises
@@ -122,13 +124,10 @@ module SearchFlip
122
124
  # @return [Hash] The raw response
123
125
 
124
126
  def get_aliases(index_name: "*", alias_name: "*")
125
- res =
126
- http_client
127
- .headers(accept: "application/json", content_type: "application/json")
128
- .get("#{base_url}/#{index_name}/_alias/#{alias_name}")
129
- .parse
130
-
131
- Hashie::Mash.new(res)
127
+ http_client
128
+ .headers(accept: "application/json", content_type: "application/json")
129
+ .get("#{base_url}/#{index_name}/_alias/#{alias_name}")
130
+ .parse
132
131
  end
133
132
 
134
133
  # Returns whether or not the associated Elasticsearch alias already
@@ -159,10 +158,10 @@ module SearchFlip
159
158
  #
160
159
  # @return [Array] The raw response
161
160
 
162
- def get_indices(name = "*")
161
+ def get_indices(name = "*", params: {})
163
162
  http_client
164
163
  .headers(accept: "application/json", content_type: "application/json")
165
- .get("#{base_url}/_cat/indices/#{name}")
164
+ .get("#{base_url}/_cat/indices/#{name}", params: params)
166
165
  .parse
167
166
  end
168
167
 
@@ -210,6 +209,32 @@ module SearchFlip
210
209
  true
211
210
  end
212
211
 
212
+ # Freezes the specified index within Elasticsearch. Raises
213
+ # SearchFlip::ResponseError in case any errors occur
214
+ #
215
+ # @param index_name [String] The index name
216
+ #
217
+ # @return [Boolean] Returns true or raises SearchFlip::ResponseError
218
+
219
+ def freeze_index(index_name)
220
+ http_client.post("#{index_url(index_name)}/_freeze")
221
+
222
+ true
223
+ end
224
+
225
+ # Unfreezes the specified index within Elasticsearch. Raises
226
+ # SearchFlip::ResponseError in case any errors occur
227
+ #
228
+ # @param index_name [String] The index name
229
+ #
230
+ # @return [Boolean] Returns true or raises SearchFlip::ResponseError
231
+
232
+ def unfreeze_index(index_name)
233
+ http_client.post("#{index_url(index_name)}/_unfreeze")
234
+
235
+ true
236
+ end
237
+
213
238
  # Updates the index settings within Elasticsearch according to the index
214
239
  # settings specified. Raises SearchFlip::ResponseError in case any
215
240
  # errors occur.
@@ -234,7 +259,10 @@ module SearchFlip
234
259
  # @return [Hash] The index settings
235
260
 
236
261
  def get_index_settings(index_name)
237
- http_client.headers(accept: "application/json").get("#{index_url(index_name)}/_settings").parse
262
+ http_client
263
+ .headers(accept: "application/json")
264
+ .get("#{index_url(index_name)}/_settings")
265
+ .parse
238
266
  end
239
267
 
240
268
  # Sends a refresh request to Elasticsearch. Raises
@@ -338,4 +366,3 @@ module SearchFlip
338
366
  end
339
367
  end
340
368
  end
341
-