elasticsearch-rails 0.1.8 → 0.1.9

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: 056008177dc6455f594126c6d1402930964812d9
4
- data.tar.gz: 07c8b5cfaaa536c67648df8d9d24ecee62f5eed4
3
+ metadata.gz: 0787291aba03d312879a2ce76404dcf85842a2bc
4
+ data.tar.gz: 271098b78bda71302678b132ab85d0a3efd8ef4d
5
5
  SHA512:
6
- metadata.gz: d43e2b96ba3873e5b70652469d55a311537fba4cf9f020e6eec6638d816d3dc8e87c9b288b3fe9c1a5b285d1e57e022d09af23023d455902d9d8920e176a0395
7
- data.tar.gz: a26d5d3fa224e6a7c7ff2752df9cf0c6ed8ec12a18a996c5d081ffa71437e3794fbede55cd010ab64647cd432953c7eedec45d52a4af967b222ee14d6f3359ed
6
+ metadata.gz: 39225728dce276bf9b5e2d7613912fd75fcbf208d3b9dd3c92ad8886e69eaa1355da24f2684a15590affcb9f54b246c6c23d4bd88274efe3156e4862cad88d8e
7
+ data.tar.gz: 05d38f3aa061b4c5dbe260c53eaeb3e79b3b73fc3e62b61304bfc76e5b596241e42dc366db6639e0cc3a66e36b9af8a000350c5f21bc9552f156338624dad3e6
@@ -1,3 +1,9 @@
1
+ ## 0.1.9
2
+
3
+ * Added checks for proper launch order and other updates to the example application templates
4
+ * Updated the example application to work with Elasticsearch 2.x
5
+ * Used the `suggest` method instead of `response['suggest']` in the application template
6
+
1
7
  ## 0.1.8
2
8
 
3
9
  * Added an example application template that loads settings from a file
@@ -24,7 +24,7 @@ Gem::Specification.new do |s|
24
24
  s.required_ruby_version = ">= 1.9.3"
25
25
 
26
26
  s.add_development_dependency "bundler", "~> 1.3"
27
- s.add_development_dependency "rake"
27
+ s.add_development_dependency "rake", "< 11.0"
28
28
 
29
29
  s.add_development_dependency "elasticsearch-extensions"
30
30
  s.add_development_dependency "elasticsearch-model"
@@ -1,5 +1,5 @@
1
1
  module Elasticsearch
2
2
  module Rails
3
- VERSION = "0.1.8"
3
+ VERSION = "0.1.9"
4
4
  end
5
5
  end
@@ -1,6 +1,9 @@
1
1
  # $ rails new searchapp --skip --skip-bundle --template https://raw.github.com/elasticsearch/elasticsearch-rails/master/elasticsearch-rails/lib/rails/templates/02-pretty.rb
2
2
 
3
- # (See: 01-basic.rb)
3
+ unless File.read('README.rdoc').include? '== [1] Basic'
4
+ say_status "ERROR", "You have to run the 01-basic.rb template first.", :red
5
+ exit(1)
6
+ end
4
7
 
5
8
  puts
6
9
  say_status "README", "Updating Readme...\n", :yellow
@@ -1,6 +1,25 @@
1
1
  # $ rails new searchapp --skip --skip-bundle --template https://raw.github.com/elasticsearch/elasticsearch-rails/master/elasticsearch-rails/lib/rails/templates/03-expert.rb
2
2
 
3
- # (See: 01-basic.rb, 02-pretty.rb)
3
+ unless File.read('README.rdoc').include? '== [2] Pretty'
4
+ say_status "ERROR", "You have to run the 01-basic.rb and 02-pretty.rb templates first.", :red
5
+ exit(1)
6
+ end
7
+
8
+ begin
9
+ require 'redis'
10
+ rescue LoadError
11
+ say_status "ERROR", "Please install the 'redis' gem before running this template", :red
12
+ exit(1)
13
+ end
14
+
15
+ begin
16
+ Redis.new.info
17
+ rescue Redis::CannotConnectError
18
+ puts
19
+ say_status "ERROR", "Redis not available", :red
20
+ say_status "", "This template uses an asynchronous indexer via Sidekiq, and requires a running Redis server."
21
+ exit(1)
22
+ end
4
23
 
5
24
  append_to_file 'README.rdoc', <<-README
6
25
 
@@ -189,7 +208,11 @@ run "bundle install"
189
208
  get 'https://raw.githubusercontent.com/elastic/elasticsearch-rails/master/elasticsearch-rails/lib/rails/templates/indexer.rb',
190
209
  'app/workers/indexer.rb'
191
210
 
192
- git add: "Gemfile* app/workers/"
211
+ insert_into_file "test/test_helper.rb",
212
+ "require 'sidekiq/testing'\n\n",
213
+ before: "class ActiveSupport::TestCase\n"
214
+
215
+ git add: "Gemfile* app/workers/ test/test_helper.rb"
193
216
  git commit: "-m 'Added a Sidekiq indexer\n\nRun:\n\n $ bundle exec sidekiq --queue elasticsearch --verbose\n\nSee http://sidekiq.org'"
194
217
 
195
218
  # ----- Add SearchController -----------------------------------------------------------------------
@@ -1,6 +1,9 @@
1
1
  # $ rails new searchapp --skip --skip-bundle --template https://raw.githubusercontent.com/elastic/elasticsearch-rails/master/elasticsearch-rails/lib/rails/templates/04-dsl.rb
2
2
 
3
- # (See: 01-basic.rb, 02-pretty.rb, 03-expert.rb)
3
+ unless File.read('README.rdoc').include? '== [3] Expert'
4
+ say_status "ERROR", "You have to run the 01-basic.rb, 02-pretty.rb and 03-expert.rb templates first.", :red
5
+ exit(1)
6
+ end
4
7
 
5
8
  append_to_file 'README.rdoc', <<-README
6
9
 
@@ -37,11 +40,11 @@ run "bundle install"
37
40
 
38
41
  # copy_file File.expand_path('../searchable.dsl.rb', __FILE__), 'app/models/concerns/searchable.rb', force: true
39
42
  get 'https://raw.githubusercontent.com/elastic/elasticsearch-rails/master/elasticsearch-rails/lib/rails/templates/searchable.dsl.rb',
40
- 'app/models/concerns/searchable.rb'
43
+ 'app/models/concerns/searchable.rb', force: true
41
44
 
42
45
  # copy_file File.expand_path('../index.html.dsl.erb', __FILE__), 'app/views/search/index.html.erb', force: true
43
46
  get 'https://raw.githubusercontent.com/elastic/elasticsearch-rails/master/elasticsearch-rails/lib/rails/templates/index.html.dsl.erb',
44
- 'app/views/search/index.html.erb'
47
+ 'app/views/search/index.html.erb', force: true
45
48
 
46
49
  gsub_file "test/controllers/search_controller_test.rb", %r{test "should return facets" do.*?end}m, <<-CODE
47
50
  test "should return aggregations" do
@@ -25,7 +25,9 @@ git commit: "-m 'Setup the Searchable module to load settings from file'"
25
25
 
26
26
  # ----- Copy the articles_settings.json file -------------------------------------------------------
27
27
 
28
- copy_file File.expand_path('../articles_settings.json', __FILE__), 'config/elasticsearch/articles_settings.json'
28
+ # copy_file File.expand_path('../articles_settings.json', __FILE__), 'config/elasticsearch/articles_settings.json'
29
+ get 'https://raw.githubusercontent.com/elastic/elasticsearch-rails/master/elasticsearch-rails/lib/rails/templates/articles_settings.json',
30
+ 'config/elasticsearch/articles_settings.json', force: true
29
31
 
30
32
  git add: "config/elasticsearch/articles_settings.json"
31
33
  git commit: "-m 'Create the articles settings file'"
@@ -47,13 +47,13 @@
47
47
  <hr>
48
48
  </div>
49
49
 
50
- <% if @articles.size < 1 && (suggestions = @articles.response.response['suggest']) && suggestions.present? %>
50
+ <% if @articles.size < 1 && @articles.response.suggestions.present? %>
51
51
  <div class="col-md-12">
52
52
  <p class="alert alert-warning">
53
53
  No documents have been found.
54
- <% if suggestions['suggest_title'].present? || suggestions['suggest_body'].present? %>
54
+ <% if @articles.response.suggestions.terms.present? %>
55
55
  Maybe you mean
56
- <%= suggestions.map { |k,v| v.first['options'] }.flatten.map {|v| v['text']}.uniq.map do |term|
56
+ <%= @articles.response.suggestions.terms.map do |term|
57
57
  link_to term, search_path(params.except(:controller, :action).merge q: term)
58
58
  end.to_sentence(last_word_connector: ' or ').html_safe %>?
59
59
  <% end %>
@@ -47,13 +47,13 @@
47
47
  <hr>
48
48
  </div>
49
49
 
50
- <% if @articles.size < 1 && (suggestions = @articles.response.response['suggest']) && suggestions.present? %>
50
+ <% if @articles.size < 1 && @articles.response.suggest.present? %>
51
51
  <div class="col-md-12">
52
52
  <p class="alert alert-warning">
53
53
  No documents have been found.
54
- <% if suggestions['suggest_title'].present? || suggestions['suggest_body'].present? %>
54
+ <% if @articles.response.suggest['suggest_title'].present? || @articles.response.suggest['suggest_body'].present? %>
55
55
  Maybe you mean
56
- <%= suggestions.map { |k,v| v.first['options'] }.flatten.map {|v| v['text']}.uniq.map do |term|
56
+ <%= @articles.response.suggest.map { |k,v| v.first['options'] }.flatten.map {|v| v['text']}.uniq.map do |term|
57
57
  link_to term, search_path(params.except(:controller, :action).merge q: term)
58
58
  end.to_sentence(last_word_connector: ' or ').html_safe %>?
59
59
  <% end %>
@@ -68,11 +68,11 @@
68
68
  <p class="panel-heading"><%= link_to 'All Sections &rarr;'.html_safe, search_path(params.except(:controller, :action).merge(c: nil))%></p>
69
69
 
70
70
  <div class="list-group">
71
- <% @articles.response.response['facets']['categories']['terms'].each do |c| %>
71
+ <% @articles.response.response['aggregations']['categories']['categories']['buckets'].each do |c| %>
72
72
  <%=
73
- link_to search_path(params.except(:controller, :action).merge(c: c['term'])),
74
- class: "list-group-item#{' active' if params[:c] == c['term']}" do
75
- c['term'].titleize.html_safe + content_tag(:small, c['count'], class: 'badge').html_safe
73
+ link_to search_path(params.except(:controller, :action).merge(c: c['key'])),
74
+ class: "list-group-item#{' active' if params[:c] == c['key']}" do
75
+ c['key'].titleize.html_safe + content_tag(:small, c['doc_count'], class: 'badge').html_safe
76
76
  end
77
77
  %>
78
78
  <% end %>
@@ -83,11 +83,11 @@
83
83
  <p class="panel-heading"><%= link_to 'All Authors &rarr;'.html_safe, search_path(params.except(:controller, :action).merge(a: nil))%></p>
84
84
 
85
85
  <div class="list-group">
86
- <% @articles.response.response['facets']['authors']['terms'].each do |a| %>
86
+ <% @articles.response.response['aggregations']['authors']['authors']['buckets'].each do |a| %>
87
87
  <%=
88
- link_to search_path(params.except(:controller, :action).merge(a: a['term'])),
89
- class: "list-group-item#{' active' if params[:a] == a['term']}" do
90
- a['term'].titleize.html_safe + content_tag(:small, a['count'], class: 'badge').html_safe
88
+ link_to search_path(params.except(:controller, :action).merge(a: a['key'])),
89
+ class: "list-group-item#{' active' if params[:a] == a['key']}" do
90
+ a['key'].titleize.html_safe + content_tag(:small, a['doc_count'], class: 'badge').html_safe
91
91
  end
92
92
  %>
93
93
  <% end %>
@@ -98,16 +98,16 @@
98
98
  <p class="panel-heading"><%= link_to 'Any Date &rarr;'.html_safe, search_path(params.except(:controller, :action).merge(w: nil))%></p>
99
99
 
100
100
  <div class="list-group">
101
- <% @articles.response.response['facets']['published']['entries'].each do |w| %>
101
+ <% @articles.response.response['aggregations']['published']['published']['buckets'].each do |w| %>
102
102
  <%=
103
- __start = Time.at(w['time']/1000)
103
+ __start = Time.at(w['key']/1000)
104
104
  __end = __start.end_of_week
105
105
  __date = __start.to_date.to_s(:iso)
106
106
 
107
107
  link_to search_path(params.except(:controller, :action).merge(w: __date)),
108
108
  class: "list-group-item#{' active' if params[:w] == __date}" do
109
109
  "#{__start.to_date.to_s(:short)} &mdash; #{__end.to_date.to_s(:short)}".html_safe + \
110
- content_tag(:small, w['count'], class: 'badge').html_safe
110
+ content_tag(:small, w['doc_count'], class: 'badge').html_safe
111
111
  end
112
112
  %>
113
113
  <% end %>
@@ -58,7 +58,7 @@ class SearchControllerTest < ActionController::TestCase
58
58
  get :index, q: 'one'
59
59
  assert_response :success
60
60
 
61
- suggestions = assigns(:articles).response.response['suggest']
61
+ suggestions = assigns(:articles).response.suggest
62
62
 
63
63
  assert_equal 'one', suggestions['suggest_title'][0]['text']
64
64
  end
@@ -30,7 +30,7 @@ class SearchControllerTest < ActionController::TestCase
30
30
 
31
31
  Article.find_by_title('Article Three').comments.create body: 'One'
32
32
 
33
- Sidekiq::Queue.new("elasticsearch").clear
33
+ Sidekiq::Worker.clear_all
34
34
 
35
35
  Article.__elasticsearch__.import force: true
36
36
  Article.__elasticsearch__.refresh_index!
@@ -45,6 +45,7 @@ class SearchControllerTest < ActionController::TestCase
45
45
  test "should return search results in comments" do
46
46
  get :index, q: 'one', comments: 'y'
47
47
  assert_response :success
48
+
48
49
  assert_equal 4, assigns(:articles).size
49
50
  end
50
51
 
@@ -58,7 +59,7 @@ class SearchControllerTest < ActionController::TestCase
58
59
  get :index, q: 'one'
59
60
  assert_response :success
60
61
 
61
- suggestions = assigns(:articles).response.response['suggest']
62
+ suggestions = assigns(:articles).response.suggest
62
63
 
63
64
  assert_equal 'one', suggestions['suggest_title'][0]['text']
64
65
  end
@@ -67,15 +68,15 @@ class SearchControllerTest < ActionController::TestCase
67
68
  get :index, q: 'one'
68
69
  assert_response :success
69
70
 
70
- facets = assigns(:articles).response.response['facets']
71
+ aggregations = assigns(:articles).response.response['aggregations']
71
72
 
72
- assert_equal 2, facets['categories']['terms'].size
73
- assert_equal 2, facets['authors']['terms'].size
74
- assert_equal 2, facets['published']['entries'].size
73
+ assert_equal 2, aggregations['categories']['categories']['buckets'].size
74
+ assert_equal 2, aggregations['authors']['authors']['buckets'].size
75
+ assert_equal 2, aggregations['published']['published']['buckets'].size
75
76
 
76
- assert_equal 'One', facets['categories']['terms'][0]['term']
77
- assert_equal 'John Smith', facets['authors']['terms'][0]['term']
78
- assert_equal 1425254400000, facets['published']['entries'][0]['time']
77
+ assert_equal 'One', aggregations['categories']['categories']['buckets'][0]['key']
78
+ assert_equal 'John Smith', aggregations['authors']['authors']['buckets'][0]['key']
79
+ assert_equal 1425254400000, aggregations['published']['published']['buckets'][0]['key']
79
80
  end
80
81
 
81
82
  test "should sort on the published date" do
@@ -104,13 +105,13 @@ class SearchControllerTest < ActionController::TestCase
104
105
 
105
106
  assert_equal 2, assigns(:articles).size
106
107
 
107
- facets = assigns(:articles).response.response['facets']
108
+ aggregations = assigns(:articles).response.response['aggregations']
108
109
 
109
- assert_equal 1, facets['authors']['terms'].size
110
- assert_equal 1, facets['published']['entries'].size
110
+ assert_equal 1, aggregations['authors']['authors']['buckets'].size
111
+ assert_equal 1, aggregations['published']['published']['buckets'].size
111
112
 
112
113
  # Do NOT filter the category facet
113
- assert_equal 2, facets['categories']['terms'].size
114
+ assert_equal 2, aggregations['categories']['categories']['buckets'].size
114
115
  end
115
116
 
116
117
  test "should filter search results and the category and published date facets when user selects a category" do
@@ -119,12 +120,12 @@ class SearchControllerTest < ActionController::TestCase
119
120
 
120
121
  assert_equal 1, assigns(:articles).size
121
122
 
122
- facets = assigns(:articles).response.response['facets']
123
+ aggregations = assigns(:articles).response.response['aggregations']
123
124
 
124
- assert_equal 1, facets['categories']['terms'].size
125
- assert_equal 1, facets['published']['entries'].size
125
+ assert_equal 1, aggregations['categories']['categories']['buckets'].size
126
+ assert_equal 1, aggregations['published']['published']['buckets'].size
126
127
 
127
128
  # Do NOT filter the authors facet
128
- assert_equal 2, facets['authors']['terms'].size
129
+ assert_equal 2, aggregations['authors']['authors']['buckets'].size
129
130
  end
130
131
  end
@@ -71,15 +71,14 @@ module Searchable
71
71
  #
72
72
  def self.search(query, options={})
73
73
 
74
- # Prefill and set the filters (top-level `filter` and `facet_filter` elements)
74
+ # Prefill and set the filters (top-level `post_filter` and aggregation `filter` elements)
75
75
  #
76
76
  __set_filters = lambda do |key, f|
77
+ @search_definition[:post_filter][:and] ||= []
78
+ @search_definition[:post_filter][:and] |= [f]
77
79
 
78
- @search_definition[:filter][:and] ||= []
79
- @search_definition[:filter][:and] |= [f]
80
-
81
- @search_definition[:facets][key.to_sym][:facet_filter][:and] ||= []
82
- @search_definition[:facets][key.to_sym][:facet_filter][:and] |= [f]
80
+ @search_definition[:aggregations][key.to_sym][:filter][:bool][:must] ||= []
81
+ @search_definition[:aggregations][key.to_sym][:filter][:bool][:must] |= [f]
83
82
  end
84
83
 
85
84
  @search_definition = {
@@ -95,27 +94,22 @@ module Searchable
95
94
  }
96
95
  },
97
96
 
98
- filter: {},
97
+ post_filter: {},
99
98
 
100
- facets: {
99
+ aggregations: {
101
100
  categories: {
102
- terms: {
103
- field: 'categories'
104
- },
105
- facet_filter: {}
101
+ filter: { bool: { must: [ match_all: {} ] } },
102
+ aggregations: { categories: { terms: { field: 'categories' } } }
106
103
  },
107
104
  authors: {
108
- terms: {
109
- field: 'authors.full_name.raw'
110
- },
111
- facet_filter: {}
105
+ filter: { bool: { must: [ match_all: {} ] } },
106
+ aggregations: { authors: { terms: { field: 'authors.full_name.raw' } } }
112
107
  },
113
108
  published: {
114
- date_histogram: {
115
- field: 'published_on',
116
- interval: 'week'
117
- },
118
- facet_filter: {}
109
+ filter: { bool: { must: [ match_all: {} ] } },
110
+ aggregations: {
111
+ published: { date_histogram: { field: 'published_on', interval: 'week' } }
112
+ }
119
113
  }
120
114
  }
121
115
  }
@@ -174,7 +168,7 @@ module Searchable
174
168
  query: {
175
169
  multi_match: {
176
170
  query: query,
177
- fields: ['body'],
171
+ fields: ['comments.body'],
178
172
  operator: 'and'
179
173
  }
180
174
  }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elasticsearch-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karel Minarik
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-12 00:00:00.000000000 Z
11
+ date: 2016-05-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -28,16 +28,16 @@ dependencies:
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "<"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '11.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "<"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '11.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: elasticsearch-extensions
43
43
  requirement: !ruby/object:Gem::Requirement