searchkick_bharthur 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/searchkick/query.rb +106 -95
- data/lib/searchkick/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 16721346103dccfb79902897450a5856cac9af7b
|
4
|
+
data.tar.gz: 598d665eb6f3d2edd077ad6a7f83a7bfa4bcca61
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dca0bd25cf59c44df5be98dbbc00aae7eeba2d8f2270c3dada915ee4d6cba908d99b6fa3f5de08245d233142af01f6cb02556bc4e3072041b34466ccd63eee83
|
7
|
+
data.tar.gz: ad9c33db97dc860a42de4f1a2af75f3aa55bcd55e4315c106e8fcd6673fe3062dabdc4e60725fdd754c4e38ddc2e32937deed0665431ec9f50800af5bbee84ec
|
data/lib/searchkick/query.rb
CHANGED
@@ -47,13 +47,13 @@ module Searchkick
|
|
47
47
|
|
48
48
|
def params
|
49
49
|
index =
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
50
|
+
if options[:index_name]
|
51
|
+
Array(options[:index_name]).map { |v| v.respond_to?(:searchkick_index) ? v.searchkick_index.name : v }.join(",")
|
52
|
+
elsif searchkick_index
|
53
|
+
searchkick_index.name
|
54
|
+
else
|
55
|
+
"_all"
|
56
|
+
end
|
57
57
|
|
58
58
|
params = {
|
59
59
|
index: index,
|
@@ -122,11 +122,11 @@ module Searchkick
|
|
122
122
|
if status_code == 404
|
123
123
|
raise MissingIndexError, "Index missing - run #{reindex_command}"
|
124
124
|
elsif status_code == 500 && (
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
125
|
+
e.message.include?("IllegalArgumentException[minimumSimilarity >= 1]") ||
|
126
|
+
e.message.include?("No query registered for [multi_match]") ||
|
127
|
+
e.message.include?("[match] query does not support [cutoff_frequency]]") ||
|
128
|
+
e.message.include?("No query registered for [function_score]]")
|
129
|
+
)
|
130
130
|
|
131
131
|
raise UnsupportedVersionError, "This version of Searchkick requires Elasticsearch 1.0 or greater"
|
132
132
|
elsif status_code == 400
|
@@ -200,13 +200,13 @@ module Searchkick
|
|
200
200
|
queries = []
|
201
201
|
|
202
202
|
misspellings =
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
203
|
+
if options.key?(:misspellings)
|
204
|
+
options[:misspellings]
|
205
|
+
elsif options.key?(:mispellings)
|
206
|
+
options[:mispellings] # why not?
|
207
|
+
else
|
208
|
+
true
|
209
|
+
end
|
210
210
|
|
211
211
|
if misspellings.is_a?(Hash) && misspellings[:below] && !@misspellings_below
|
212
212
|
@misspellings_below = misspellings[:below].to_i
|
@@ -216,13 +216,13 @@ module Searchkick
|
|
216
216
|
if misspellings != false
|
217
217
|
edit_distance = (misspellings.is_a?(Hash) && (misspellings[:edit_distance] || misspellings[:distance])) || 1
|
218
218
|
transpositions =
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
219
|
+
if misspellings.is_a?(Hash) && misspellings.key?(:transpositions)
|
220
|
+
{fuzzy_transpositions: misspellings[:transpositions]}
|
221
|
+
elsif below14?
|
222
|
+
{}
|
223
|
+
else
|
224
|
+
{fuzzy_transpositions: true}
|
225
|
+
end
|
226
226
|
prefix_length = (misspellings.is_a?(Hash) && misspellings[:prefix_length]) || 0
|
227
227
|
default_max_expansions = @misspellings_below ? 20 : 3
|
228
228
|
max_expansions = (misspellings.is_a?(Hash) && misspellings[:max_expansions]) || default_max_expansions
|
@@ -238,12 +238,12 @@ module Searchkick
|
|
238
238
|
}
|
239
239
|
|
240
240
|
match_type =
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
241
|
+
if field.end_with?(".phrase")
|
242
|
+
field = field.sub(/\.phrase\z/, ".analyzed")
|
243
|
+
:match_phrase
|
244
|
+
else
|
245
|
+
:match
|
246
|
+
end
|
247
247
|
|
248
248
|
shared_options[:operator] = operator if match_type == :match || below50?
|
249
249
|
|
@@ -278,11 +278,11 @@ module Searchkick
|
|
278
278
|
if conversions_field && options[:conversions] != false
|
279
279
|
# wrap payload in a bool query
|
280
280
|
script_score =
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
281
|
+
if below12?
|
282
|
+
{script_score: {script: "doc['count'].value"}}
|
283
|
+
else
|
284
|
+
{field_value_factor: {field: "#{conversions_field}.count"}}
|
285
|
+
end
|
286
286
|
|
287
287
|
payload = {
|
288
288
|
bool: {
|
@@ -397,25 +397,25 @@ module Searchkick
|
|
397
397
|
boost_fields = {}
|
398
398
|
fields = options[:fields] || searchkick_options[:searchable]
|
399
399
|
fields =
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
else
|
404
|
-
fields.map do |value|
|
405
|
-
k, v = value.is_a?(Hash) ? value.to_a.first : [value, options[:match] || searchkick_options[:match] || :word]
|
406
|
-
k2, boost = k.to_s.split("^", 2)
|
407
|
-
field = "#{k2}.#{v == :word ? 'analyzed' : v}"
|
408
|
-
boost_fields[field] = boost.to_f if boost
|
409
|
-
field
|
410
|
-
end
|
411
|
-
end
|
400
|
+
if fields
|
401
|
+
if options[:autocomplete]
|
402
|
+
fields.map { |f| "#{f}.autocomplete" }
|
412
403
|
else
|
413
|
-
|
414
|
-
(
|
415
|
-
|
416
|
-
|
404
|
+
fields.map do |value|
|
405
|
+
k, v = value.is_a?(Hash) ? value.to_a.first : [value, options[:match] || searchkick_options[:match] || :word]
|
406
|
+
k2, boost = k.to_s.split("^", 2)
|
407
|
+
field = "#{k2}.#{v == :word ? 'analyzed' : v}"
|
408
|
+
boost_fields[field] = boost.to_f if boost
|
409
|
+
field
|
417
410
|
end
|
418
411
|
end
|
412
|
+
else
|
413
|
+
if options[:autocomplete]
|
414
|
+
(searchkick_options[:autocomplete] || []).map { |f| "#{f}.autocomplete" }
|
415
|
+
else
|
416
|
+
["_all"]
|
417
|
+
end
|
418
|
+
end
|
419
419
|
[boost_fields, fields]
|
420
420
|
end
|
421
421
|
|
@@ -525,7 +525,7 @@ module Searchkick
|
|
525
525
|
payload[:aggs] = {}
|
526
526
|
|
527
527
|
if aggs.is_a?(Hash) && aggs[:body]
|
528
|
-
payload[:aggs] = aggs[:body]
|
528
|
+
payload[:aggs] = aggs[:body]
|
529
529
|
else
|
530
530
|
aggs = Hash[aggs.map { |f| [f, {}] }] if aggs.is_a?(Array) # convert to more advanced syntax
|
531
531
|
|
@@ -629,36 +629,47 @@ module Searchkick
|
|
629
629
|
end
|
630
630
|
|
631
631
|
def set_filters(payload, filters)
|
632
|
-
if options[:
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
payload[:post_filter] = {
|
639
|
-
bool: {
|
640
|
-
filter: filters
|
632
|
+
if options[:custom]
|
633
|
+
payload[:query] = {
|
634
|
+
filtered: {
|
635
|
+
query: payload[:query],
|
636
|
+
filter: {
|
637
|
+
and: filters
|
641
638
|
}
|
642
639
|
}
|
643
|
-
|
640
|
+
}
|
644
641
|
else
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
651
|
-
|
642
|
+
if options[:facets] || options[:aggs]
|
643
|
+
if below20?
|
644
|
+
payload[:filter] = {
|
645
|
+
and: filters
|
646
|
+
}
|
647
|
+
else
|
648
|
+
payload[:post_filter] = {
|
649
|
+
bool: {
|
650
|
+
filter: filters
|
652
651
|
}
|
653
652
|
}
|
654
|
-
|
653
|
+
end
|
655
654
|
else
|
656
|
-
|
657
|
-
|
658
|
-
|
659
|
-
|
655
|
+
# more efficient query if no facets
|
656
|
+
if below20?
|
657
|
+
payload[:query] = {
|
658
|
+
filtered: {
|
659
|
+
query: payload[:query],
|
660
|
+
filter: {
|
661
|
+
and: filters
|
662
|
+
}
|
663
|
+
}
|
660
664
|
}
|
661
|
-
|
665
|
+
else
|
666
|
+
payload[:query] = {
|
667
|
+
bool: {
|
668
|
+
must: payload[:query],
|
669
|
+
filter: filters
|
670
|
+
}
|
671
|
+
}
|
672
|
+
end
|
662
673
|
end
|
663
674
|
end
|
664
675
|
end
|
@@ -728,18 +739,18 @@ module Searchkick
|
|
728
739
|
filters << term_filters(field, op_value)
|
729
740
|
else
|
730
741
|
range_query =
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
|
737
|
-
|
738
|
-
|
739
|
-
|
740
|
-
|
741
|
-
|
742
|
-
|
742
|
+
case op
|
743
|
+
when :gt
|
744
|
+
{from: op_value, include_lower: false}
|
745
|
+
when :gte
|
746
|
+
{from: op_value, include_lower: true}
|
747
|
+
when :lt
|
748
|
+
{to: op_value, include_upper: false}
|
749
|
+
when :lte
|
750
|
+
{to: op_value, include_upper: true}
|
751
|
+
else
|
752
|
+
raise "Unknown where operator: #{op.inspect}"
|
753
|
+
end
|
743
754
|
# issue 132
|
744
755
|
if (existing = filters.find { |f| f[:range] && f[:range][field] })
|
745
756
|
existing[:range][field].merge!(range_query)
|
@@ -801,12 +812,12 @@ module Searchkick
|
|
801
812
|
log = value.key?(:log) ? value[:log] : options[:log]
|
802
813
|
value[:factor] ||= 1
|
803
814
|
script_score =
|
804
|
-
|
805
|
-
|
806
|
-
|
807
|
-
|
808
|
-
|
809
|
-
|
815
|
+
if below12?
|
816
|
+
script = log ? "log(doc['#{field}'].value + 2.718281828)" : "doc['#{field}'].value"
|
817
|
+
{script_score: {script: "#{value[:factor].to_f} * #{script}"}}
|
818
|
+
else
|
819
|
+
{field_value_factor: {field: field, factor: value[:factor].to_f, modifier: log ? "ln2p" : nil}}
|
820
|
+
end
|
810
821
|
|
811
822
|
{
|
812
823
|
filter: {
|
data/lib/searchkick/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: searchkick_bharthur
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kane
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-07-
|
12
|
+
date: 2016-07-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|