estella 0.3.0 → 2.0.0
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 +4 -4
- data/.travis.yml +13 -5
- data/CHANGELOG.md +7 -1
- data/CONTRIBUTING.md +125 -0
- data/Dangerfile +1 -0
- data/Gemfile +1 -0
- data/LICENSE +7 -7
- data/README.md +35 -25
- data/Rakefile +1 -1
- data/estella.gemspec +5 -5
- data/lib/estella/analysis.rb +9 -9
- data/lib/estella/parser.rb +2 -3
- data/lib/estella/query.rb +4 -0
- data/lib/estella/version.rb +1 -1
- data/spec/searchable_spec.rb +2 -2
- data/spec/spec_helper.rb +1 -1
- metadata +31 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 005678de72fb7aef97a46d6cbc64d198ea6104cb
|
4
|
+
data.tar.gz: d9dae12511d40cd83781a63946e0bf00c500165b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da680ba976b1deb2ccc3a88185caaf3a95e36e0523da8fe9f29ddd1a085e33f56ede8a2deef3b7d48bf3386828c88fd37f26428f1cf36876bce4e69691a1f785
|
7
|
+
data.tar.gz: c2bd518ae2d407d72cdc78e130b63873c2dee8889987e81e481395a54abb771e4ba514304aeb59361c8e5af2ef1fa6dbc7d8097ef9a0ea4581d4c942abda4e16
|
data/.travis.yml
CHANGED
@@ -2,12 +2,20 @@ language: ruby
|
|
2
2
|
|
3
3
|
cache: bundler
|
4
4
|
|
5
|
-
|
6
|
-
-
|
5
|
+
before_script:
|
6
|
+
- bundle exec danger
|
7
|
+
|
8
|
+
env:
|
9
|
+
- ELASTICSEARCH=https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/deb/elasticsearch/2.4.5/elasticsearch-2.4.5.deb
|
10
|
+
- ELASTICSEARCH=https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.6.deb
|
7
11
|
|
8
12
|
before_install:
|
13
|
+
- gem update --system
|
9
14
|
- gem update bundler
|
10
|
-
-
|
15
|
+
- curl -O $ELASTICSEARCH && sudo dpkg -i --force-confnew elasticsearch-*.deb
|
11
16
|
- "echo 'script.inline: on' | sudo tee -a /etc/elasticsearch/elasticsearch.yml"
|
12
|
-
-
|
13
|
-
-
|
17
|
+
- sudo /etc/init.d/elasticsearch start
|
18
|
+
- until curl --silent -XGET --fail http://localhost:9200; do printf '.'; sleep 1; done
|
19
|
+
|
20
|
+
rvm:
|
21
|
+
- 2.3.1
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
## Changelog
|
2
2
|
|
3
|
-
### 0.
|
3
|
+
### 2.0.0
|
4
|
+
|
5
|
+
* [#25](https://github.com/artsy/estella/pull/25): Support ElasticSearch 1.5.x - [@dblock](https://github.com/dblock).
|
6
|
+
* [#21](https://github.com/artsy/estella/pull/21): Added Danger, PR linter - [@dblock](https://github.com/dblock).
|
7
|
+
* [#20](https://github.com/artsy/estella/pull/20): Documented ES compatibility with 2.x - [@cavvia](https://github.com/cavvia).
|
8
|
+
|
9
|
+
### 0.3.0 (1/29/2017)
|
4
10
|
|
5
11
|
* [#15](https://github.com/artsy/estella/pull/15): Removed undocumented `set_index_alias!` - [@dblock](https://github.com/dblock).
|
6
12
|
* [#15](https://github.com/artsy/estella/pull/15): Added `delete_index!` and `create_index!` - [@dblock](https://github.com/dblock).
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,125 @@
|
|
1
|
+
# Contributing to Estella
|
2
|
+
|
3
|
+
This project is work of [many contributors](https://github.com/artsy/estella/graphs/contributors).
|
4
|
+
|
5
|
+
You're encouraged to submit [pull requests](https://github.com/artsy/estella/pulls), [propose features and discuss issues](https://github.com/artsy/estella/issues).
|
6
|
+
|
7
|
+
In the examples below, substitute your Github username for `contributor` in URLs.
|
8
|
+
|
9
|
+
### Fork the Project
|
10
|
+
|
11
|
+
Fork the [project on Github](https://github.com/artsy/estella) and check out your copy.
|
12
|
+
|
13
|
+
```
|
14
|
+
git clone https://github.com/contributor/estella.git
|
15
|
+
cd estella
|
16
|
+
git remote add upstream https://github.com/artsy/estella.git
|
17
|
+
```
|
18
|
+
|
19
|
+
### Bundle Install and Test
|
20
|
+
|
21
|
+
Ensure that you can build the project and run tests.
|
22
|
+
|
23
|
+
```
|
24
|
+
bundle install
|
25
|
+
bundle exec rake
|
26
|
+
```
|
27
|
+
|
28
|
+
## Contribute Code
|
29
|
+
|
30
|
+
### Create a Topic Branch
|
31
|
+
|
32
|
+
Make sure your fork is up-to-date and create a topic branch for your feature or bug fix.
|
33
|
+
|
34
|
+
```
|
35
|
+
git checkout master
|
36
|
+
git pull upstream master
|
37
|
+
git checkout -b my-feature-branch
|
38
|
+
```
|
39
|
+
|
40
|
+
### Write Tests
|
41
|
+
|
42
|
+
Try to write a test that reproduces the problem you're trying to fix or describes a feature that you want to build. Add tests to [spec](spec).
|
43
|
+
|
44
|
+
We definitely appreciate pull requests that highlight or reproduce a problem, even without a fix.
|
45
|
+
|
46
|
+
### Write Code
|
47
|
+
|
48
|
+
Implement your feature or bug fix.
|
49
|
+
|
50
|
+
Ruby style is enforced with [Rubocop](https://github.com/bbatsov/rubocop). Run `bundle exec rubocop` and fix any style issues highlighted, auto-correct issues when possible with `bundle exec rubocop -a`. To silence generally ingored issues, including line lengths or code complexity metrics, run `bundle exec rubocop --auto-gen-config`.
|
51
|
+
|
52
|
+
Make sure that `bundle exec rake` completes without errors.
|
53
|
+
|
54
|
+
### Write Documentation
|
55
|
+
|
56
|
+
Document any external behavior in the [README](README.md).
|
57
|
+
|
58
|
+
### Update Changelog
|
59
|
+
|
60
|
+
Add a line to [CHANGELOG](CHANGELOG.md) under *Next*. Don't remove *Your contribution here*.
|
61
|
+
|
62
|
+
Make it look like every other line, including a link to the issue being fixed, your name and link to your Github account.
|
63
|
+
|
64
|
+
### Commit Changes
|
65
|
+
|
66
|
+
Make sure git knows your name and email address:
|
67
|
+
|
68
|
+
```
|
69
|
+
git config --global user.name "Your Name"
|
70
|
+
git config --global user.email "contributor@example.com"
|
71
|
+
```
|
72
|
+
|
73
|
+
Writing good commit logs is important. A commit log should describe what changed and why.
|
74
|
+
|
75
|
+
```
|
76
|
+
git add ...
|
77
|
+
git commit
|
78
|
+
```
|
79
|
+
|
80
|
+
### Push
|
81
|
+
|
82
|
+
```
|
83
|
+
git push origin my-feature-branch
|
84
|
+
```
|
85
|
+
|
86
|
+
### Make a Pull Request
|
87
|
+
|
88
|
+
Go to https://github.com/contributor/estella and select your feature branch. Click the 'Pull Request' button and fill out the form. Pull requests are usually reviewed within a few days.
|
89
|
+
|
90
|
+
### Update CHANGELOG Again
|
91
|
+
|
92
|
+
Update the [CHANGELOG](CHANGELOG.md) with the pull request number. A typical entry looks as follows.
|
93
|
+
|
94
|
+
```
|
95
|
+
* [#123](https://github.com/artsy/estella/pull/123): Reticulated splines - [@contributor](https://github.com/contributor).
|
96
|
+
```
|
97
|
+
|
98
|
+
Amend your previous commit and force push the changes.
|
99
|
+
|
100
|
+
```
|
101
|
+
git commit --amend
|
102
|
+
git push origin my-feature-branch -f
|
103
|
+
```
|
104
|
+
|
105
|
+
### Rebase
|
106
|
+
|
107
|
+
If you've been working on a change for a while, rebase with upstream/master.
|
108
|
+
|
109
|
+
```
|
110
|
+
git fetch upstream
|
111
|
+
git rebase upstream/master
|
112
|
+
git push origin my-feature-branch -f
|
113
|
+
```
|
114
|
+
|
115
|
+
### Check on Your Pull Request
|
116
|
+
|
117
|
+
Go back to your pull request after a few minutes and see whether it passed muster with Travis-CI. Everything should look green, otherwise fix issues and amend your commit as described above.
|
118
|
+
|
119
|
+
### Be Patient
|
120
|
+
|
121
|
+
It's likely that your change will not be merged and that the nitpicky maintainers will ask you to do more, or fix seemingly benign problems. Hang on there!
|
122
|
+
|
123
|
+
## Thank You
|
124
|
+
|
125
|
+
Please do know that we really appreciate and value your time and work. We love you, really.
|
data/Dangerfile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
changelog.check
|
data/Gemfile
CHANGED
data/LICENSE
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
MIT License
|
2
2
|
|
3
|
-
Copyright (c) 2017
|
3
|
+
Copyright (c) 2017 Art.sy, Inc.
|
4
4
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
|
+
this software and associated documentation files (the "Software"), to deal in
|
7
|
+
the Software without restriction, including without limitation the rights to
|
8
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
9
|
+
of the Software, and to permit persons to whom the Software is furnished to do
|
10
|
+
so, subject to the following conditions:
|
11
11
|
|
12
12
|
The above copyright notice and this permission notice shall be included in all
|
13
13
|
copies or substantial portions of the Software.
|
data/README.md
CHANGED
@@ -7,23 +7,35 @@
|
|
7
7
|
|
8
8
|
Builds on [elasticsearch-model](https://github.com/elastic/elasticsearch-rails/tree/master/elasticsearch-model) to make your Ruby objects searchable with Elasticsearch. Provides fine-grained control of fields, analysis, filters, weightings and boosts.
|
9
9
|
|
10
|
+
## Compatibility
|
11
|
+
|
12
|
+
This library is compatible with [Elasticsearch 1.5.x, 2.x](https://www.elastic.co/products/elasticsearch) and currently does not work with Elasticsearch 5.x (see [#18](https://github.com/artsy/estella/issues/18)). It works with many ORM/ODMs, including ActiveRecord and Mongoid.
|
13
|
+
|
14
|
+
## Dependencies
|
15
|
+
|
16
|
+
* [elasticsearch-model](https://github.com/elastic/elasticsearch-rails/tree/master/elasticsearch-model)
|
17
|
+
* [ActiveSupport](https://github.com/rails/rails/tree/master/activesupport)
|
18
|
+
* [ActiveModel](https://github.com/rails/rails/tree/master/activemodel)
|
19
|
+
|
10
20
|
## Installation
|
11
21
|
|
12
22
|
```
|
13
23
|
gem 'estella'
|
14
24
|
```
|
15
25
|
|
16
|
-
|
26
|
+
Estella will try to use Elasticsearch on `localhost:9200` by default.
|
27
|
+
|
28
|
+
You can configure your global ElasticSearch client like so:
|
17
29
|
|
18
30
|
```ruby
|
19
31
|
Elasticsearch::Model.client = Elasticsearch::Client.new host: 'foo.com', log: true
|
20
32
|
```
|
21
33
|
|
22
|
-
It
|
34
|
+
It's also configurable on a per-model basis. Refer to the [ElasticSearch documentation](https://github.com/elastic/elasticsearch-rails/tree/master/elasticsearch-model#the-elasticsearch-client) for details.
|
23
35
|
|
24
36
|
## Indexing
|
25
37
|
|
26
|
-
|
38
|
+
Include the `Estella::Searchable` module and add a `searchable` block in your model declaring the fields to be indexed.
|
27
39
|
|
28
40
|
```ruby
|
29
41
|
class Artist < ActiveRecord::Base
|
@@ -41,7 +53,7 @@ class Artist < ActiveRecord::Base
|
|
41
53
|
end
|
42
54
|
```
|
43
55
|
|
44
|
-
For a full
|
56
|
+
For a full list of the options available for field mappings, see the ElasticSearch [mapping documentation](https://www.elastic.co/guide/en/elasticsearch/reference/2.4/mapping.html).
|
45
57
|
|
46
58
|
The `filter` option allows the field to be used as a filter at search time.
|
47
59
|
|
@@ -90,10 +102,10 @@ end
|
|
90
102
|
A number of class methods are available for indexing.
|
91
103
|
|
92
104
|
```
|
93
|
-
#
|
105
|
+
# return true if the index exists
|
94
106
|
Artist.index_exists?
|
95
107
|
|
96
|
-
#
|
108
|
+
# create the index
|
97
109
|
Artist.create_index!
|
98
110
|
|
99
111
|
# delete and re-create the index without reindexing data
|
@@ -102,7 +114,7 @@ Artist.reload_index!
|
|
102
114
|
# recreate the index and reindex all data
|
103
115
|
Artist.recreate_index!
|
104
116
|
|
105
|
-
#
|
117
|
+
# delete the index
|
106
118
|
Artist.delete_index!
|
107
119
|
|
108
120
|
# commit any outstanding writes
|
@@ -111,19 +123,19 @@ Artist.refresh_index!
|
|
111
123
|
|
112
124
|
## Custom Analysis
|
113
125
|
|
114
|
-
Estella defines `standard`, `snowball`, `ngram` and `shingle`
|
126
|
+
Estella defines `standard`, `snowball`, `ngram` and `shingle` analyzers by default. These cover most search contexts, including auto-suggest. In order to enable full-text search for a field, use:
|
115
127
|
|
116
128
|
```ruby
|
117
129
|
analysis: Estella::Analysis::FULLTEXT_ANALYSIS
|
118
130
|
```
|
119
131
|
|
120
|
-
Or alternatively select your analysis by listing the
|
132
|
+
Or alternatively select your analysis by listing the analyzers you want enabled for a given field:
|
121
133
|
|
122
134
|
```ruby
|
123
|
-
|
135
|
+
field :keywords, type: :string, analysis: ['snowball', 'shingle']
|
124
136
|
```
|
125
137
|
|
126
|
-
|
138
|
+
Estella default analyzer and sharding options are defined [here](lib/estella/analysis.rb) and can be customized by passing a `settings` hash to the `searchable` block.
|
127
139
|
|
128
140
|
```ruby
|
129
141
|
my_analysis = {
|
@@ -148,18 +160,18 @@ searchable my_settings do
|
|
148
160
|
end
|
149
161
|
```
|
150
162
|
|
151
|
-
|
163
|
+
See [configuring analyzers](https://www.elastic.co/guide/en/elasticsearch/guide/current/configuring-analyzers.html) for more information.
|
152
164
|
|
153
165
|
## Searching
|
154
166
|
|
155
|
-
|
167
|
+
Perform full-text search with `estella_search`:
|
156
168
|
|
157
169
|
```ruby
|
158
170
|
Artist.estella_search(term: 'frank')
|
159
171
|
Artist.estella_search(term: 'minimalism')
|
160
172
|
```
|
161
173
|
|
162
|
-
Estella searches all
|
174
|
+
Estella searches all analyzed text fields by default, using a [multi_match](https://www.elastic.co/guide/en/elasticsearch/guide/current/multi-match-query.html) search. The search will return an array of database records, ordered by score. If you'd like access to the raw Elasticsearch response data use the `raw` option:
|
163
175
|
|
164
176
|
```ruby
|
165
177
|
Artist.estella_search(term: 'frank', raw: true)
|
@@ -172,13 +184,13 @@ Artist.estella_search(term: 'frank', published: true)
|
|
172
184
|
Artist.estella_search(term: 'frank', size: 10, from: 5)
|
173
185
|
```
|
174
186
|
|
175
|
-
You can exclude records
|
187
|
+
You can exclude records:
|
176
188
|
|
177
189
|
```ruby
|
178
190
|
Artist.estella_search(term: 'frank', exclude: { keywords: 'sinatra' })
|
179
191
|
```
|
180
192
|
|
181
|
-
If you'd like to customize your query further, you can extend `Estella::Query` and override `query_definition` and `field_factors`:
|
193
|
+
If you'd like to customize your term query further, you can extend `Estella::Query` and override `query_definition` and `field_factors`:
|
182
194
|
|
183
195
|
```ruby
|
184
196
|
class MyQuery < Estella::Query
|
@@ -202,16 +214,16 @@ class MyQuery < Estella::Query
|
|
202
214
|
end
|
203
215
|
```
|
204
216
|
|
205
|
-
Or manipulate the query in the initializer directly via `query` or using built-in helpers `must` and `exclude`.
|
217
|
+
Or manipulate the query for all cases (with or without `term`) in the initializer directly via `query` or by using built-in helpers `must` and `exclude`.
|
206
218
|
|
207
219
|
```ruby
|
208
220
|
class MyQuery < Estella::Query
|
209
221
|
def initialize(params)
|
210
222
|
super
|
211
223
|
# same as query[:filter][:bool][:must] = { keywords: 'frank' }
|
212
|
-
must
|
224
|
+
must(term: { keywords: 'frank' })
|
213
225
|
# same as query[:filter][:bool][:must_not] = { keywords: 'sinatra' }
|
214
|
-
exclude
|
226
|
+
exclude(term: { keywords: 'sinatra' })
|
215
227
|
end
|
216
228
|
end
|
217
229
|
```
|
@@ -231,17 +243,15 @@ class Artist < ActiveRecord::Base
|
|
231
243
|
end
|
232
244
|
end
|
233
245
|
|
234
|
-
Artist.estella_search
|
246
|
+
Artist.estella_search(term: 'frank')
|
235
247
|
```
|
236
248
|
|
237
|
-
For further search customization, see the [
|
238
|
-
|
239
|
-
Estella works with any ActiveRecord or Mongoid compatible data models.
|
249
|
+
For further search customization, see the [ElasticSearch DSL](https://github.com/elastic/elasticsearch-rails/tree/master/elasticsearch-model#the-elasticsearch-dsl).
|
240
250
|
|
241
251
|
## Contributing
|
242
252
|
|
243
|
-
|
253
|
+
See [CONTRIBUTING](CONTRIBUTING.md).
|
244
254
|
|
245
255
|
## License
|
246
256
|
|
247
|
-
|
257
|
+
MIT License. See [LICENSE](LICENSE).
|
data/Rakefile
CHANGED
data/estella.gemspec
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
$LOAD_PATH.unshift File.expand_path('
|
1
|
+
$LOAD_PATH.unshift File.expand_path('lib', __dir__)
|
2
2
|
require 'estella/version'
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
@@ -14,14 +14,14 @@ Gem::Specification.new do |gem|
|
|
14
14
|
gem.files = `git ls-files`.split("\n")
|
15
15
|
gem.test_files = `git ls-files -- spec/*`.split("\n")
|
16
16
|
|
17
|
-
gem.add_runtime_dependency 'elasticsearch-model'
|
18
|
-
gem.add_runtime_dependency 'activesupport'
|
19
17
|
gem.add_runtime_dependency 'activemodel'
|
18
|
+
gem.add_runtime_dependency 'activesupport'
|
19
|
+
gem.add_runtime_dependency 'elasticsearch-model', '~> 2.0'
|
20
20
|
|
21
|
-
gem.add_development_dependency 'rake', '~> 11.0'
|
22
21
|
gem.add_development_dependency 'activerecord'
|
22
|
+
gem.add_development_dependency 'rake', '~> 11.0'
|
23
23
|
gem.add_development_dependency 'rspec', '~> 3.1.0'
|
24
24
|
gem.add_development_dependency 'rspec-expectations'
|
25
|
+
gem.add_development_dependency 'rubocop', '0.60.0'
|
25
26
|
gem.add_development_dependency 'sqlite3'
|
26
|
-
gem.add_development_dependency 'rubocop', '0.47.1'
|
27
27
|
end
|
data/lib/estella/analysis.rb
CHANGED
@@ -7,16 +7,16 @@ module Estella
|
|
7
7
|
{ type: 'edgeNGram', min_gram: 2, max_gram: 15, side: 'front' }
|
8
8
|
|
9
9
|
DEFAULT_ANALYZER =
|
10
|
-
{ type: 'custom', tokenizer: 'standard_tokenizer', filter: %w
|
10
|
+
{ type: 'custom', tokenizer: 'standard_tokenizer', filter: %w[lowercase asciifolding] }
|
11
11
|
|
12
12
|
SNOWBALL_ANALYZER =
|
13
|
-
{ type: 'custom', tokenizer: 'standard_tokenizer', filter: %w
|
13
|
+
{ type: 'custom', tokenizer: 'standard_tokenizer', filter: %w[lowercase asciifolding snowball] }
|
14
14
|
|
15
15
|
SHINGLE_ANALYZER =
|
16
|
-
{ type: 'custom', tokenizer: 'standard_tokenizer', filter: %w
|
16
|
+
{ type: 'custom', tokenizer: 'standard_tokenizer', filter: %w[shingle lowercase asciifolding] }
|
17
17
|
|
18
18
|
NGRAM_ANALYZER =
|
19
|
-
{ type: 'custom', tokenizer: 'standard_tokenizer', filter: %w
|
19
|
+
{ type: 'custom', tokenizer: 'standard_tokenizer', filter: %w[lowercase asciifolding front_ngram_filter] }
|
20
20
|
|
21
21
|
DEFAULT_ANALYSIS = {
|
22
22
|
tokenizer: {
|
@@ -26,11 +26,11 @@ module Estella
|
|
26
26
|
front_ngram_filter: FRONT_NGRAM_FILTER
|
27
27
|
},
|
28
28
|
analyzer: {
|
29
|
-
default_analyzer:
|
30
|
-
snowball_analyzer:
|
31
|
-
shingle_analyzer:
|
32
|
-
ngram_analyzer:
|
33
|
-
search_analyzer:
|
29
|
+
default_analyzer: DEFAULT_ANALYZER,
|
30
|
+
snowball_analyzer: SNOWBALL_ANALYZER,
|
31
|
+
shingle_analyzer: SHINGLE_ANALYZER,
|
32
|
+
ngram_analyzer: NGRAM_ANALYZER,
|
33
|
+
search_analyzer: DEFAULT_ANALYZER
|
34
34
|
}
|
35
35
|
}
|
36
36
|
|
data/lib/estella/parser.rb
CHANGED
@@ -8,9 +8,8 @@ module Estella
|
|
8
8
|
# @see https://www.elastic.co/guide/en/elasticsearch/guide/current/boosting-by-popularity.html
|
9
9
|
def boost(name, opts = {})
|
10
10
|
fail ArgumentError, 'Boost field is not indexed!' unless @model.indexed_fields.include? name
|
11
|
-
unless (opts.keys & [
|
12
|
-
|
13
|
-
end
|
11
|
+
fail ArgumentError, 'Please supply a modifier and a factor for your boost!' unless (opts.keys & %i[modifier factor]).length == 2
|
12
|
+
|
14
13
|
@model.field_boost = { boost: { field: name }.merge(opts) }
|
15
14
|
end
|
16
15
|
|
data/lib/estella/query.rb
CHANGED
@@ -80,6 +80,7 @@ module Estella
|
|
80
80
|
|
81
81
|
max = boost[:max]
|
82
82
|
return unless max
|
83
|
+
|
83
84
|
query[:query][:function_score][:max_boost] = max
|
84
85
|
end
|
85
86
|
|
@@ -101,8 +102,10 @@ module Estella
|
|
101
102
|
def add_filters
|
102
103
|
indexed_fields = params[:indexed_fields]
|
103
104
|
return unless indexed_fields
|
105
|
+
|
104
106
|
indexed_fields.each do |field, opts|
|
105
107
|
next unless opts[:filter] && params[field]
|
108
|
+
|
106
109
|
must term: { field => params[field] }
|
107
110
|
end
|
108
111
|
end
|
@@ -110,6 +113,7 @@ module Estella
|
|
110
113
|
def add_excludes
|
111
114
|
exclude = params[:exclude]
|
112
115
|
return unless exclude
|
116
|
+
|
113
117
|
exclude.each do |k, v|
|
114
118
|
exclude(term: { k => v })
|
115
119
|
end
|
data/lib/estella/version.rb
CHANGED
data/spec/searchable_spec.rb
CHANGED
@@ -19,7 +19,7 @@ describe Estella::Searchable, type: :model do
|
|
19
19
|
|
20
20
|
searchable do
|
21
21
|
field :title, type: :string, analysis: Estella::Analysis::FULLTEXT_ANALYSIS, factor: 1.0
|
22
|
-
field :keywords, type: :string, analysis: [
|
22
|
+
field :keywords, type: :string, analysis: %i[default snowball], factor: 0.5
|
23
23
|
field :follows_count, type: :integer
|
24
24
|
field :published, type: :boolean, filter: true
|
25
25
|
|
@@ -75,7 +75,7 @@ describe Estella::Searchable, type: :model do
|
|
75
75
|
it 'indexes slug field by default' do
|
76
76
|
SearchableModel.create(title: 'liapunov', slug: 'liapunov')
|
77
77
|
SearchableModel.refresh_index!
|
78
|
-
expect(SearchableModel.mappings.to_hash[:searchable_model][:properties].
|
78
|
+
expect(SearchableModel.mappings.to_hash[:searchable_model][:properties].key?(:slug)).to eq true
|
79
79
|
end
|
80
80
|
it 'supports boolean filters' do
|
81
81
|
liapunov = SearchableModel.create(title: 'liapunov', published: true)
|
data/spec/spec_helper.rb
CHANGED
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: 0.
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anil Bawa-Cavia
|
@@ -9,10 +9,10 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2019-08-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
15
|
+
name: activemodel
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
18
|
- - ">="
|
@@ -40,47 +40,47 @@ dependencies:
|
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
|
-
name:
|
43
|
+
name: elasticsearch-model
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - "
|
46
|
+
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: '0'
|
48
|
+
version: '2.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: '0'
|
55
|
+
version: '2.0'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
|
-
name:
|
57
|
+
name: activerecord
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- - "
|
60
|
+
- - ">="
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: '
|
62
|
+
version: '0'
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- - "
|
67
|
+
- - ">="
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: '
|
69
|
+
version: '0'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
|
-
name:
|
71
|
+
name: rake
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- - "
|
74
|
+
- - "~>"
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version: '0'
|
76
|
+
version: '11.0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- - "
|
81
|
+
- - "~>"
|
82
82
|
- !ruby/object:Gem::Version
|
83
|
-
version: '0'
|
83
|
+
version: '11.0'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: rspec
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
@@ -110,33 +110,33 @@ dependencies:
|
|
110
110
|
- !ruby/object:Gem::Version
|
111
111
|
version: '0'
|
112
112
|
- !ruby/object:Gem::Dependency
|
113
|
-
name:
|
113
|
+
name: rubocop
|
114
114
|
requirement: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
|
-
- -
|
116
|
+
- - '='
|
117
117
|
- !ruby/object:Gem::Version
|
118
|
-
version:
|
118
|
+
version: 0.60.0
|
119
119
|
type: :development
|
120
120
|
prerelease: false
|
121
121
|
version_requirements: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
|
-
- -
|
123
|
+
- - '='
|
124
124
|
- !ruby/object:Gem::Version
|
125
|
-
version:
|
125
|
+
version: 0.60.0
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
|
-
name:
|
127
|
+
name: sqlite3
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
129
129
|
requirements:
|
130
|
-
- -
|
130
|
+
- - ">="
|
131
131
|
- !ruby/object:Gem::Version
|
132
|
-
version: 0
|
132
|
+
version: '0'
|
133
133
|
type: :development
|
134
134
|
prerelease: false
|
135
135
|
version_requirements: !ruby/object:Gem::Requirement
|
136
136
|
requirements:
|
137
|
-
- -
|
137
|
+
- - ">="
|
138
138
|
- !ruby/object:Gem::Version
|
139
|
-
version: 0
|
139
|
+
version: '0'
|
140
140
|
description: Make your Ruby objects searchable with Elasticsearch.
|
141
141
|
email:
|
142
142
|
- anil@artsy.net
|
@@ -151,6 +151,8 @@ files:
|
|
151
151
|
- ".rubocop_todo.yml"
|
152
152
|
- ".travis.yml"
|
153
153
|
- CHANGELOG.md
|
154
|
+
- CONTRIBUTING.md
|
155
|
+
- Dangerfile
|
154
156
|
- Gemfile
|
155
157
|
- LICENSE
|
156
158
|
- README.md
|
@@ -186,7 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
186
188
|
version: '0'
|
187
189
|
requirements: []
|
188
190
|
rubyforge_project:
|
189
|
-
rubygems_version: 2.
|
191
|
+
rubygems_version: 2.5.1
|
190
192
|
signing_key:
|
191
193
|
specification_version: 4
|
192
194
|
summary: Make your Ruby objects searchable with Elasticsearch.
|