es-elasticity 0.6.4 → 0.6.5

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: d8f22efbfa1c08ea072b29ab855c27ac110d1704
4
- data.tar.gz: 934d6ec4117475deb51496588301e1f1f8fce84d
3
+ metadata.gz: bf031d70eec61e290731d0e3c92aa70d369052ed
4
+ data.tar.gz: 6340aec039146f81aeadcfee37feaa388beb63c8
5
5
  SHA512:
6
- metadata.gz: 6f8d4cc458979c125047deae5c8cc1638f6891d13eeb1b5cd3eb0b2ee634e7dab8ce32dd567080fd093901345a76659f0499ae75d12e715d75325206195fee32
7
- data.tar.gz: 96ea9b7cea8666887f8d7f453d5b0f10b1cae8d225a7a3da24f72e9782f33a483bc07ab8e8ee7c0b9b5335c447d258c1c9502ad6e267b2c579668992fc2a3b30
6
+ metadata.gz: f4d8a7fd73ae3724848e194d7850ab178bd62e39bd9c806a609adf3e460792ffc3fe3bdaaf330331950fa5762c7721f23304c2316a1c0c90c8c0929c04b0d9cb
7
+ data.tar.gz: b0ed024340bc2e8df1bccbd4bd2618016a61db97bc16e7ed7c1d292457dadd3d56a881c609fcb63c5184232412df211576f0b874e5a290ac0dca9c2711cce565
data/CHANGELOG CHANGED
@@ -1,3 +1,6 @@
1
+ v0.6.5
2
+ - update search and multi search interfaces to allow passing of general
3
+ search definition arguments found in https://github.com/elastic/elasticsearch-ruby/blob/bdf5e145e5acc21726dddcd34492debbbddde568/elasticsearch-api/lib/elasticsearch/api/actions/search.rb#L125-L162
1
4
  v0.6.4
2
5
  - update suggestions to pull from the proper key
3
6
  v0.6.3
data/README.md CHANGED
@@ -181,10 +181,10 @@ cursor.each_batch { |batch| ... }
181
181
  cursor.each { |doc| ... }
182
182
 
183
183
  # Lastly, a search that maps back to an ActiveRecord::Relation.
184
- adults = adults.active_record(User)
184
+ adults = adults.active_records(User)
185
185
  ```
186
186
 
187
- For more information about the `active_record` method, read [ActiveRecord integration](#activerecord-integration).
187
+ For more information about the `active_records` method, read [ActiveRecord integration](#activerecord-integration).
188
188
 
189
189
  ### Segmented Documents
190
190
 
@@ -378,7 +378,7 @@ end
378
378
  Because the return of that method is a lazy-evaluated search, it allows specific search strategies to be used, one of them being ActiveRecord specific:
379
379
 
380
380
  ```ruby
381
- adults = Search::User.adults.active_record(User)
381
+ adults = Search::User.adults.active_records(User)
382
382
  adults.class # => ActiveRecord::Relation
383
383
  adults.all # => [#<User: id: 1, name: "John", birthdate: 1985-10-31>, ...]
384
384
  ```
@@ -386,7 +386,7 @@ adults.all # => [#<User: id: 1, name: "John", birthdate: 1985-10-31>, ...]
386
386
  Note that the method takes a relation and not a class, so the following is also possible:
387
387
 
388
388
  ```ruby
389
- Search::User.adults.active_record(User.where(active: true))
389
+ Search::User.adults.active_records(User.where(active: true))
390
390
  ```
391
391
 
392
392
  ## Roadmap
@@ -1,9 +1,10 @@
1
1
  module Elasticity
2
2
  class MultiSearch
3
3
 
4
- def initialize
4
+ def initialize(msearch_args = {})
5
5
  @searches = {}
6
6
  @mappers = {}
7
+ @msearch_args = msearch_args
7
8
  yield self if block_given?
8
9
  end
9
10
 
@@ -25,8 +26,6 @@ module Elasticity
25
26
 
26
27
  def [](name)
27
28
  results_collection[name]
28
- rescue NoMethodError => e
29
- raise "#{e.inspect} with key #{name}"
30
29
  end
31
30
 
32
31
  private
@@ -41,7 +40,8 @@ module Elasticity
41
40
  end
42
41
 
43
42
  response = ActiveSupport::Notifications.instrument("multi_search.elasticity", args: { body: bodies }) do
44
- Elasticity.config.client.msearch(body: bodies.map(&:dup))
43
+ args = { body: bodies.map(&:dup) }.reverse_merge(@msearch_args)
44
+ Elasticity.config.client.msearch(args)
45
45
  end
46
46
  results = {}
47
47
 
@@ -11,9 +11,9 @@ module Elasticity
11
11
  attr_accessor :index_name, :document_types, :body
12
12
 
13
13
  def initialize(index_name, document_types, body)
14
- @index_name = index_name
14
+ @index_name = index_name
15
15
  @document_types = document_types
16
- @body = body.deep_symbolize_keys!
16
+ @body = body.deep_symbolize_keys!
17
17
  end
18
18
 
19
19
  def update(body_changes)
@@ -51,16 +51,16 @@ module Elasticity
51
51
 
52
52
  # Performs the search using the default search type and returning an iterator that will yield
53
53
  # hash representations of the documents.
54
- def document_hashes
54
+ def document_hashes(search_args = {})
55
55
  return @document_hashes if defined?(@document_hashes)
56
- @document_hashes = LazySearch.new(@client, @search_definition)
56
+ @document_hashes = LazySearch.new(@client, @search_definition, search_args)
57
57
  end
58
58
 
59
59
  # Performs the search using the default search type and returning an iterator that will yield
60
60
  # each document, converted using the provided mapper
61
- def documents(mapper)
61
+ def documents(mapper, search_args = {})
62
62
  return @documents if defined?(@documents)
63
- @documents = LazySearch.new(@client, @search_definition) do |hit|
63
+ @documents = LazySearch.new(@client, @search_definition, search_args) do |hit|
64
64
  mapper.(hit)
65
65
  end
66
66
  end
@@ -89,10 +89,11 @@ module Elasticity
89
89
 
90
90
  attr_accessor :search_definition
91
91
 
92
- def initialize(client, search_definition, &mapper)
92
+ def initialize(client, search_definition, search_args, &mapper)
93
93
  @client = client
94
94
  @search_definition = search_definition
95
95
  @mapper = mapper
96
+ @search_args = search_args
96
97
  end
97
98
 
98
99
  def empty?
@@ -119,7 +120,7 @@ module Elasticity
119
120
 
120
121
  def response
121
122
  return @response if defined?(@response)
122
- @response = @client.search(@search_definition.to_search_args)
123
+ @response = @client.search(@search_definition.to_search_args.reverse_merge(@search_args))
123
124
  end
124
125
  end
125
126
 
@@ -263,8 +264,8 @@ module Elasticity
263
264
 
264
265
  delegate :search_definition, :active_records, to: :@search
265
266
 
266
- def documents
267
- @search.documents(@document_klass)
267
+ def documents(search_args = {})
268
+ @search.documents(@document_klass, search_args)
268
269
  end
269
270
 
270
271
  def scan_documents(**options)
@@ -1,3 +1,3 @@
1
1
  module Elasticity
2
- VERSION = "0.6.4"
2
+ VERSION = "0.6.5"
3
3
  end
@@ -96,4 +96,17 @@ RSpec.describe Elasticity::MultiSearch do
96
96
  expect(subject[:first].aggregations).to eq aggregations["aggregations"]
97
97
  expect(subject[:second].aggregations).to eq Hash.new
98
98
  end
99
+
100
+ it "performs multi search with additional arguments" do
101
+ msearch = Elasticity::MultiSearch.new(search_type: :dfs_query_then_fetch)
102
+ msearch.add(:first, Elasticity::Search::Facade.new(client, Elasticity::Search::Definition.new("index_first", "document_first", { search: :first, size: 2 })), documents: klass)
103
+ msearch.add(:second, Elasticity::Search::Facade.new(client, Elasticity::Search::Definition.new("index_second", "document_second", { search: :second })), documents: klass)
104
+
105
+ expect(Elasticity.config.client).to receive(:msearch).with(search_type: :dfs_query_then_fetch, body: [
106
+ { index: "index_first", type: "document_first", search: { search: :first, size: 2 } },
107
+ { index: "index_second", type: "document_second", search: { search: :second } },
108
+ ]).and_return(response)
109
+
110
+ expect(Array(msearch[:first])).to eq([klass.new(_id: 1, name: "foo"), klass.new(_id: 2, name: "bar")])
111
+ end
99
112
  end
@@ -179,6 +179,22 @@ RSpec.describe "Search" do
179
179
  expect(docs.next_page).to eq(3)
180
180
  expect(docs.previous_page).to eq(1)
181
181
  end
182
+
183
+ it "merges in additional arguments for search" do
184
+ results = double(:results, :[] => { "hits" => [] })
185
+ subject = Elasticity::Search::Facade.new(
186
+ client,
187
+ Elasticity::Search::Definition.new(index_name, document_type, {})
188
+ )
189
+
190
+ expect(client).to receive(:search).with(
191
+ index: index_name,
192
+ type: document_type,
193
+ body: {},
194
+ search_type: :dfs_query_and_fetch
195
+ ).and_return(results)
196
+ subject.documents(mapper, search_type: :dfs_query_and_fetch).search_results
197
+ end
182
198
  end
183
199
 
184
200
  describe Elasticity::Search::DocumentProxy do
@@ -201,5 +217,13 @@ RSpec.describe "Search" do
201
217
  expect(search).to receive(:active_records).with(rel).and_return(records)
202
218
  expect(subject.active_records(rel)).to be records
203
219
  end
220
+
221
+ it "accepts additional arguments for a search" do
222
+ results = double(:results)
223
+
224
+ expect(search).to receive(:documents).with(mapper, search_type: :dfs_query_then_fetch).and_return(results)
225
+ expect(subject.documents(search_type: :dfs_query_then_fetch)).to eq(results)
226
+ end
227
+
204
228
  end
205
229
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: es-elasticity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.4
4
+ version: 0.6.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rodrigo Kochenburger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-16 00:00:00.000000000 Z
11
+ date: 2016-10-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler