CloudSesame 0.9.3 → 0.9.4

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: 7d1d680e39e44b948dc04bd6a8f996cd7d109229
4
- data.tar.gz: 795b99bd61a96360994718f242a13a4510b234ac
3
+ metadata.gz: 02f14e8cadd284a12b337f3e28fb7744e1065227
4
+ data.tar.gz: 565265a014c5a268368eeda35351ce1ae1d992ed
5
5
  SHA512:
6
- metadata.gz: 94ea33464a2dcda66f409ba6c557a5969356b78d86f0df81bd11080841fc2b081e2186755dbab733d35affe4f0401679475b7877dd201000e969696015e7c07d
7
- data.tar.gz: e84cd330e1d8924bef29f2f1a6eac044f43548b8b57392e1dbd0b907c41c992ab60cdc54a769c4965c90256c8f2282c612051ead15670d41d033e66545aa1408
6
+ metadata.gz: b92efd2b60322029bd31fb265cef7af32e3103cb1a9c170698561128269950853cb47bc036a4ba6e5fd477ce5ab200a8a3ced3eb65c43689aa039f44a835b0ec
7
+ data.tar.gz: 3b4d7b871accdebdd3cfa671074911be4407fce7973de202db242f8390600724751958c8f64ac4b0967bec26e43075e09adecb133c9a3e9884362a34e1d00768
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- CloudSesame (0.9.3)
4
+ CloudSesame (0.9.4)
5
5
  aws-sdk (~> 2)
6
6
 
7
7
  GEM
data/cloud_sesame.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'CloudSesame'
3
- s.version = '0.9.3'
3
+ s.version = '0.9.4'
4
4
  s.date = '2016-09-12'
5
5
  s.summary = "AWS CloudSearch Query DSL"
6
6
  s.description = "AWS CloudSearch Query DSL"
data/lib/cloud_sesame.rb CHANGED
@@ -37,7 +37,6 @@ require 'cloud_sesame/query/dsl/range_helper'
37
37
  require 'cloud_sesame/query/dsl/response_methods'
38
38
  require 'cloud_sesame/query/dsl/return_methods'
39
39
  require 'cloud_sesame/query/dsl/sort_methods'
40
- require 'cloud_sesame/query/dsl/k_gram_phrase_methods'
41
40
  require 'cloud_sesame/query/dsl/any_term_methods'
42
41
 
43
42
  # Query Query Domain Objects
@@ -11,7 +11,6 @@ module CloudSesame
11
11
  include DSL::ReturnMethods
12
12
  include DSL::ScopeAccessors
13
13
  include DSL::SortMethods
14
- include DSL::KGramPhraseMethods
15
14
  include DSL::AnyTermMethods
16
15
 
17
16
  # ClassSpecific construct class callback
@@ -9,7 +9,6 @@ module CloudSesame
9
9
  include DSL::RangeHelper
10
10
  include DSL::ScopeAccessors
11
11
  include DSL::BindCaller
12
- include DSL::KGramPhraseMethods
13
12
  include DSL::AnyTermMethods
14
13
 
15
14
  after_construct { |_, field_accessor| include field_accessor }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: CloudSesame
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.3
4
+ version: 0.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Chu
@@ -189,7 +189,6 @@ files:
189
189
  - lib/cloud_sesame/query/dsl/bind_caller.rb
190
190
  - lib/cloud_sesame/query/dsl/block_styled_operators.rb
191
191
  - lib/cloud_sesame/query/dsl/inspect_method.rb
192
- - lib/cloud_sesame/query/dsl/k_gram_phrase_methods.rb
193
192
  - lib/cloud_sesame/query/dsl/literal_chaining_methods.rb
194
193
  - lib/cloud_sesame/query/dsl/literal_methods.rb
195
194
  - lib/cloud_sesame/query/dsl/operators.rb
@@ -249,7 +248,6 @@ files:
249
248
  - spec/cloud_sesame/query/dsl/any_term_methods_spec.rb
250
249
  - spec/cloud_sesame/query/dsl/applied_filter_query_spec.rb
251
250
  - spec/cloud_sesame/query/dsl/block_styled_operators_spec.rb
252
- - spec/cloud_sesame/query/dsl/k_gram_phrase_methods_spec.rb
253
251
  - spec/cloud_sesame/query/dsl/literal_chaining_methods_spec.rb
254
252
  - spec/cloud_sesame/query/dsl/literal_methods_spec.rb
255
253
  - spec/cloud_sesame/query/node/abstract_spec.rb
@@ -323,7 +321,6 @@ test_files:
323
321
  - spec/cloud_sesame/query/dsl/any_term_methods_spec.rb
324
322
  - spec/cloud_sesame/query/dsl/applied_filter_query_spec.rb
325
323
  - spec/cloud_sesame/query/dsl/block_styled_operators_spec.rb
326
- - spec/cloud_sesame/query/dsl/k_gram_phrase_methods_spec.rb
327
324
  - spec/cloud_sesame/query/dsl/literal_chaining_methods_spec.rb
328
325
  - spec/cloud_sesame/query/dsl/literal_methods_spec.rb
329
326
  - spec/cloud_sesame/query/node/abstract_spec.rb
@@ -1,51 +0,0 @@
1
- module CloudSesame
2
- module Query
3
- module DSL
4
- module KGramPhraseMethods
5
- DELIMITER = ' '.freeze
6
- MULTIPLIER = 10 # Even number that controls the separation between k-grams
7
-
8
- def k_gram_phrase(field, value, options = {})
9
- if value && !value.empty?
10
- words = value.split(DELIMITER).compact
11
-
12
- or!(options) do
13
- literal field, phrase(value, boost: MULTIPLIER * words.size + MULTIPLIER)
14
-
15
- each_k_gram_combination(words, options[:min]) do |combination, original|
16
- remaining_terms = (original - combination).join(' ')
17
- unique_phrase = combination.join(' ')
18
- boost = MULTIPLIER * combination.size
19
-
20
- and!(boost: boost + MULTIPLIER / 2 + MULTIPLIER) do
21
- literal field, phrase(unique_phrase)
22
- literal field, term(remaining_terms)
23
- end
24
-
25
- literal field, phrase(unique_phrase, boost: boost / 2)
26
- end
27
-
28
- literal field, term(value, boost: MULTIPLIER + MULTIPLIER)
29
- any_term(field, words.join(' '))
30
- end
31
- end
32
-
33
- _return != _scope ? _return : self
34
- end
35
-
36
- private
37
-
38
- def each_k_gram_combination(array, min)
39
- min ||= 4
40
- size = array.size
41
- m = [size - min, 1].max
42
- n = size - 1
43
- while n > m
44
- array.each_cons(n) { |con| yield(con, array) }
45
- n -= 1
46
- end
47
- end
48
- end
49
- end
50
- end
51
- end
@@ -1,119 +0,0 @@
1
- module CloudSesame
2
- module Query
3
- module DSL
4
- describe KGramPhraseMethods do
5
-
6
- class Product
7
- include CloudSesame
8
- define_cloudsearch do
9
- field :name, query: { weight: 2 }, type: :string
10
- field :description, query: { weight: 0.4 }, type: :string
11
- end
12
- end
13
-
14
- subject(:cloudsearch) { Product.cloudsearch.builder }
15
- let(:root) { cloudsearch.request.filter_query.root }
16
-
17
- describe '#k_gram_phrase' do
18
- let(:phrase) { 'listerine mouth wash' }
19
-
20
- it 'inserts an OR node at its scope level' do
21
- expect { cloudsearch.k_gram_phrase(:name, phrase) }.to change { root.children }.by([AST::Or])
22
- end
23
-
24
- describe 'in the OR node' do
25
- let(:or_node) { root.children.first }
26
-
27
- it 'builds a phrase node with original term' do
28
- cloudsearch.k_gram_phrase(:name, phrase)
29
-
30
- phrase_node = or_node.children.first
31
- expect(phrase_node).to be_kind_of AST::Phrase
32
- expect(phrase_node.child.value).to eq(phrase)
33
- expect(phrase_node.options[:boost]).to eq(KGramPhraseMethods::MULTIPLIER * 3 + KGramPhraseMethods::MULTIPLIER)
34
- end
35
-
36
- it 'builds a term node with original term' do
37
- cloudsearch.k_gram_phrase(:name, phrase)
38
-
39
- term_node = or_node.children[-2]
40
- expect(term_node).to be_kind_of AST::Term
41
- expect(term_node.child.value).to eq(phrase)
42
- expect(term_node.options[:boost]).to eq(KGramPhraseMethods::MULTIPLIER + KGramPhraseMethods::MULTIPLIER)
43
- end
44
-
45
- it 'builds bunch of phrase nodes with k grams' do
46
- cloudsearch.k_gram_phrase(:name, phrase)
47
- k_nodes = or_node.children[1..-2]
48
-
49
- expect(k_nodes[0]).to be_kind_of AST::And
50
-
51
- expect(k_nodes[1]).to be_kind_of AST::Phrase
52
- expect(k_nodes[1].options[:boost]).to eq(KGramPhraseMethods::MULTIPLIER * 2 / 2)
53
- expect(k_nodes[1].child.value).to eq('listerine mouth')
54
-
55
- expect(k_nodes[2]).to be_kind_of AST::And
56
-
57
- expect(k_nodes[3]).to be_kind_of AST::Phrase
58
- expect(k_nodes[3].options[:boost]).to eq(KGramPhraseMethods::MULTIPLIER * 2 / 2)
59
- expect(k_nodes[3].child.value).to eq('mouth wash')
60
- end
61
-
62
- it 'builds the correct first And node (for k-gram plus excluded terms)' do
63
- cloudsearch.k_gram_phrase(:name, phrase)
64
- and_node = or_node.children[1..-2][0]
65
-
66
- expect(and_node.options[:boost]).to eq(KGramPhraseMethods::MULTIPLIER * 2 + KGramPhraseMethods::MULTIPLIER / 2 + KGramPhraseMethods::MULTIPLIER)
67
-
68
- expect(and_node.children.first).to be_kind_of AST::Phrase
69
- expect(and_node.children.first.child.value).to eq('listerine mouth')
70
-
71
- expect(and_node.children.last).to be_kind_of AST::Term
72
- expect(and_node.children.last.child.value).to eq('wash')
73
- end
74
-
75
- it 'builds the correct second And node (for k-gram plus excluded terms)' do
76
- cloudsearch.k_gram_phrase(:name, phrase)
77
- and_node = or_node.children[1..-2][2]
78
-
79
- expect(and_node.options[:boost]).to eq(KGramPhraseMethods::MULTIPLIER * 2 + KGramPhraseMethods::MULTIPLIER / 2 + KGramPhraseMethods::MULTIPLIER)
80
-
81
- expect(and_node.children.first).to be_kind_of AST::Phrase
82
- expect(and_node.children.first.child.value).to eq('mouth wash')
83
-
84
- expect(and_node.children.last).to be_kind_of AST::Term
85
- expect(and_node.children.last.child.value).to eq('listerine')
86
- end
87
-
88
- it 'builds an or node with term nodes for each word' do
89
- cloudsearch.k_gram_phrase(:name, phrase)
90
- node = or_node.children.last
91
-
92
- expect(node).to be_kind_of(AST::Or)
93
- expect(node.children.length).to eq(3)
94
- expect(node.children[0]).to be_kind_of(AST::Term)
95
- expect(node.children[0].child.value).to eq('listerine')
96
- expect(node.children[1]).to be_kind_of(AST::Term)
97
- expect(node.children[1].child.value).to eq('mouth')
98
- expect(node.children[2]).to be_kind_of(AST::Term)
99
- expect(node.children[2].child.value).to eq('wash')
100
- end
101
-
102
- it 'splits the phrase on space and nothing else' do
103
- cloudsearch.k_gram_phrase(:name, 'word-word2 word3')
104
- expect(or_node.children.length).to eq(3)
105
- end
106
- end
107
-
108
- context 'when phrase is empty' do
109
- let(:phrase) { nil }
110
-
111
- it 'does not build anything' do
112
- expect { cloudsearch.k_gram_phrase(:name, phrase) }.to_not change { root.children }
113
- end
114
- end
115
- end
116
- end
117
- end
118
- end
119
- end