estella 2.0.0 → 5.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +16 -10
- data/.travis.yml +1 -3
- data/CHANGELOG.md +4 -0
- data/estella.gemspec +1 -1
- data/lib/estella/analysis.rb +11 -5
- data/lib/estella/parser.rb +2 -1
- data/lib/estella/query.rb +23 -14
- data/lib/estella/searchable.rb +2 -2
- data/lib/estella/version.rb +1 -1
- data/spec/searchable_spec.rb +2 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9f1958b160694e75e7771648c51db035971f5977
|
4
|
+
data.tar.gz: a178684df8dbcfdfbc73464aaac3c40cbdaf9611
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7664182130bd8c9016e7d6a606e733a7d88039c97167247b46d48a01ee18ebb01fe36a88a6aa1c55bd5c702727e31bff6eaa740151fa1aaac48d1fbea7b7b031
|
7
|
+
data.tar.gz: 75e4fcbb9b614af1b498d5d143b3cc0508d9801cbb248d6231e8455fff27a42e096be8b5794b799406d35e0a3a09138f246ad15f241a5dad16dd3a0eb535e5e1
|
data/.rubocop_todo.yml
CHANGED
@@ -1,30 +1,30 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on
|
3
|
+
# on 2019-05-20 16:29:39 -0400 using RuboCop version 0.60.0.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
8
8
|
|
9
|
-
# Offense count:
|
9
|
+
# Offense count: 3
|
10
10
|
Metrics/AbcSize:
|
11
11
|
Max: 18
|
12
12
|
|
13
13
|
# Offense count: 3
|
14
14
|
# Configuration parameters: CountComments, ExcludedMethods.
|
15
|
+
# ExcludedMethods: refine
|
15
16
|
Metrics/BlockLength:
|
16
17
|
Max: 134
|
17
18
|
|
18
|
-
# Offense count: 30
|
19
|
-
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
|
20
|
-
# URISchemes: http, https
|
21
|
-
Metrics/LineLength:
|
22
|
-
Max: 135
|
23
|
-
|
24
19
|
# Offense count: 1
|
25
20
|
# Configuration parameters: CountComments.
|
21
|
+
Metrics/ClassLength:
|
22
|
+
Max: 103
|
23
|
+
|
24
|
+
# Offense count: 1
|
25
|
+
# Configuration parameters: CountComments, ExcludedMethods.
|
26
26
|
Metrics/MethodLength:
|
27
|
-
Max:
|
27
|
+
Max: 12
|
28
28
|
|
29
29
|
# Offense count: 3
|
30
30
|
# Cop supports --auto-correct.
|
@@ -65,8 +65,14 @@ Style/MutableConstant:
|
|
65
65
|
|
66
66
|
# Offense count: 2
|
67
67
|
# Cop supports --auto-correct.
|
68
|
-
# Configuration parameters: EnforcedStyle
|
68
|
+
# Configuration parameters: EnforcedStyle.
|
69
69
|
# SupportedStyles: only_raise, only_fail, semantic
|
70
70
|
Style/SignalException:
|
71
71
|
Exclude:
|
72
72
|
- 'lib/estella/parser.rb'
|
73
|
+
|
74
|
+
# Offense count: 30
|
75
|
+
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
|
76
|
+
# URISchemes: http, https
|
77
|
+
Metrics/LineLength:
|
78
|
+
Max: 135
|
data/.travis.yml
CHANGED
@@ -6,14 +6,12 @@ before_script:
|
|
6
6
|
- bundle exec danger
|
7
7
|
|
8
8
|
env:
|
9
|
-
- ELASTICSEARCH=https://
|
10
|
-
- ELASTICSEARCH=https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.6.deb
|
9
|
+
- ELASTICSEARCH=https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.16.deb
|
11
10
|
|
12
11
|
before_install:
|
13
12
|
- gem update --system
|
14
13
|
- gem update bundler
|
15
14
|
- curl -O $ELASTICSEARCH && sudo dpkg -i --force-confnew elasticsearch-*.deb
|
16
|
-
- "echo 'script.inline: on' | sudo tee -a /etc/elasticsearch/elasticsearch.yml"
|
17
15
|
- sudo /etc/init.d/elasticsearch start
|
18
16
|
- until curl --silent -XGET --fail http://localhost:9200; do printf '.'; sleep 1; done
|
19
17
|
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
## Changelog
|
2
2
|
|
3
|
+
### 5.0.0
|
4
|
+
|
5
|
+
* [#29](https://github.com/artsy/estella/pull/29): Support Elasticsearch 5.x - [@izakp](https://github.com/izakp).
|
6
|
+
|
3
7
|
### 2.0.0
|
4
8
|
|
5
9
|
* [#25](https://github.com/artsy/estella/pull/25): Support ElasticSearch 1.5.x - [@dblock](https://github.com/dblock).
|
data/estella.gemspec
CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |gem|
|
|
16
16
|
|
17
17
|
gem.add_runtime_dependency 'activemodel'
|
18
18
|
gem.add_runtime_dependency 'activesupport'
|
19
|
-
gem.add_runtime_dependency 'elasticsearch-model', '~>
|
19
|
+
gem.add_runtime_dependency 'elasticsearch-model', '~> 5.0'
|
20
20
|
|
21
21
|
gem.add_development_dependency 'activerecord'
|
22
22
|
gem.add_development_dependency 'rake', '~> 11.0'
|
data/lib/estella/analysis.rb
CHANGED
@@ -18,6 +18,9 @@ module Estella
|
|
18
18
|
NGRAM_ANALYZER =
|
19
19
|
{ type: 'custom', tokenizer: 'standard_tokenizer', filter: %w[lowercase asciifolding front_ngram_filter] }
|
20
20
|
|
21
|
+
EMAIL_ANALYZER =
|
22
|
+
{ type: 'custom', tokenizer: 'uax_url_email', filter: %w[lowercase stop] }
|
23
|
+
|
21
24
|
DEFAULT_ANALYSIS = {
|
22
25
|
tokenizer: {
|
23
26
|
standard_tokenizer: { type: 'standard' }
|
@@ -30,15 +33,17 @@ module Estella
|
|
30
33
|
snowball_analyzer: SNOWBALL_ANALYZER,
|
31
34
|
shingle_analyzer: SHINGLE_ANALYZER,
|
32
35
|
ngram_analyzer: NGRAM_ANALYZER,
|
36
|
+
email_analyzer: EMAIL_ANALYZER,
|
33
37
|
search_analyzer: DEFAULT_ANALYZER
|
34
38
|
}
|
35
39
|
}
|
36
40
|
|
37
41
|
DEFAULT_FIELDS = {
|
38
|
-
default: { type: '
|
39
|
-
snowball: { type: '
|
40
|
-
shingle: { type: '
|
41
|
-
ngram: { type: '
|
42
|
+
default: { type: 'text', analyzer: 'default_analyzer' },
|
43
|
+
snowball: { type: 'text', analyzer: 'snowball_analyzer' },
|
44
|
+
shingle: { type: 'text', analyzer: 'shingle_analyzer' },
|
45
|
+
ngram: { type: 'text', analyzer: 'ngram_analyzer', search_analyzer: 'search_analyzer' },
|
46
|
+
email: { type: 'text', analyzer: 'email_analyzer' }
|
42
47
|
}
|
43
48
|
|
44
49
|
DEFAULT_FIELD_FACTORS = {
|
@@ -46,7 +51,8 @@ module Estella
|
|
46
51
|
ngram: 10,
|
47
52
|
snowball: 3,
|
48
53
|
shingle: 2,
|
49
|
-
search: 2
|
54
|
+
search: 2,
|
55
|
+
email: 2
|
50
56
|
}
|
51
57
|
|
52
58
|
FULLTEXT_ANALYSIS = DEFAULT_FIELDS.keys
|
data/lib/estella/parser.rb
CHANGED
@@ -18,7 +18,8 @@ module Estella
|
|
18
18
|
using = opts[:using] || name
|
19
19
|
analysis = opts[:analysis] & @model.default_analysis_fields.keys
|
20
20
|
opts[:fields] ||= Hash[analysis.zip(@model.default_analysis_fields.values_at(*analysis))] if analysis
|
21
|
-
|
21
|
+
include_raw = opts.delete(:include_raw)
|
22
|
+
opts[:fields][:raw] = { type: 'keyword' } if include_raw
|
22
23
|
@model.indexed_json.merge!(name => using)
|
23
24
|
@model.indexed_fields.merge!(name => opts)
|
24
25
|
end
|
data/lib/estella/query.rb
CHANGED
@@ -8,10 +8,7 @@ module Estella
|
|
8
8
|
@params = params
|
9
9
|
@query = {
|
10
10
|
_source: false,
|
11
|
-
query: {},
|
12
|
-
filter: {
|
13
|
-
bool: { must: [], must_not: [] }
|
14
|
-
},
|
11
|
+
query: { bool: { must: [{ match_all: {} }], must_not: [], filter: [] } },
|
15
12
|
aggregations: {}
|
16
13
|
}
|
17
14
|
add_query
|
@@ -21,14 +18,22 @@ module Estella
|
|
21
18
|
end
|
22
19
|
|
23
20
|
def must(filter)
|
24
|
-
query[:
|
21
|
+
if query[:query][:function_score]
|
22
|
+
query[:query][:function_score][:query][:bool][:filter] << filter
|
23
|
+
else
|
24
|
+
query[:query][:bool][:filter] << filter
|
25
|
+
end
|
25
26
|
end
|
26
27
|
|
27
28
|
def exclude(filter)
|
28
|
-
query[:
|
29
|
+
if query[:query][:function_score]
|
30
|
+
query[:query][:function_score][:query][:bool][:must_not] << filter
|
31
|
+
else
|
32
|
+
query[:query][:bool][:must_not] << filter
|
33
|
+
end
|
29
34
|
end
|
30
35
|
|
31
|
-
def
|
36
|
+
def term_query_definition
|
32
37
|
{
|
33
38
|
multi_match: {
|
34
39
|
type: 'most_fields',
|
@@ -50,18 +55,22 @@ module Estella
|
|
50
55
|
end
|
51
56
|
|
52
57
|
def add_query
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
query[:query] = { match_all: {} }
|
57
|
-
end
|
58
|
+
return unless params[:term] && params[:indexed_fields]
|
59
|
+
|
60
|
+
add_term_query
|
58
61
|
end
|
59
62
|
|
60
63
|
# fulltext search across all string fields
|
61
64
|
def add_term_query
|
62
65
|
query[:query] = {
|
63
66
|
function_score: {
|
64
|
-
query:
|
67
|
+
query: {
|
68
|
+
bool: {
|
69
|
+
must: term_query_definition,
|
70
|
+
filter: [],
|
71
|
+
must_not: []
|
72
|
+
}
|
73
|
+
}
|
65
74
|
}
|
66
75
|
}
|
67
76
|
|
@@ -88,7 +97,7 @@ module Estella
|
|
88
97
|
# boost them by factor if provided
|
89
98
|
def term_search_fields
|
90
99
|
params[:indexed_fields]
|
91
|
-
.select { |_, opts| opts[:type].to_s == '
|
100
|
+
.select { |_, opts| opts[:type].to_s == 'text' }
|
92
101
|
.reject { |_, opts| opts[:analysis].nil? }
|
93
102
|
.map do |field, opts|
|
94
103
|
opts[:analysis].map do |analyzer|
|
data/lib/estella/searchable.rb
CHANGED
@@ -59,7 +59,7 @@ module Estella
|
|
59
59
|
# indexes slug attribute by default
|
60
60
|
def index_slug
|
61
61
|
if defined? slug
|
62
|
-
indexed_fields.merge!(slug: { type: :
|
62
|
+
indexed_fields.merge!(slug: { type: :keyword })
|
63
63
|
indexed_json.merge!(slug: :slug)
|
64
64
|
end
|
65
65
|
end
|
@@ -77,7 +77,7 @@ module Estella
|
|
77
77
|
settings(settings) do
|
78
78
|
mapping do
|
79
79
|
indexed_fields.each do |name, opts|
|
80
|
-
indexes name, opts.except(:analysis, :using, :factor, :filter)
|
80
|
+
indexes name, opts.except(:analysis, :using, :factor, :filter, :include_raw)
|
81
81
|
end
|
82
82
|
end
|
83
83
|
end
|
data/lib/estella/version.rb
CHANGED
data/spec/searchable_spec.rb
CHANGED
@@ -18,8 +18,8 @@ describe Estella::Searchable, type: :model do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
searchable do
|
21
|
-
field :title, type: :
|
22
|
-
field :keywords, type: :
|
21
|
+
field :title, type: :text, analysis: Estella::Analysis::FULLTEXT_ANALYSIS, factor: 1.0
|
22
|
+
field :keywords, type: :text, analysis: %i[default snowball], factor: 0.5
|
23
23
|
field :follows_count, type: :integer
|
24
24
|
field :published, type: :boolean, filter: true
|
25
25
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: estella
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 5.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anil Bawa-Cavia
|
@@ -45,14 +45,14 @@ dependencies:
|
|
45
45
|
requirements:
|
46
46
|
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: '
|
48
|
+
version: '5.0'
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: '
|
55
|
+
version: '5.0'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: activerecord
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|