blacklight-spotlight 0.20.3 → 0.21.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/spotlight/controller.rb +1 -2
  3. data/app/controllers/spotlight/catalog_controller.rb +1 -1
  4. data/app/controllers/spotlight/concerns/user_invitable.rb +1 -1
  5. data/app/controllers/spotlight/roles_controller.rb +1 -1
  6. data/app/controllers/spotlight/searches_controller.rb +5 -1
  7. data/app/models/concerns/spotlight/ar_light.rb +8 -0
  8. data/app/models/concerns/spotlight/solr_document.rb +0 -1
  9. data/app/models/spotlight/blacklight_configuration.rb +3 -1
  10. data/app/models/spotlight/filter.rb +12 -1
  11. data/app/models/spotlight/resource.rb +13 -2
  12. data/app/models/spotlight/search.rb +4 -0
  13. data/app/uploaders/spotlight/attachment_uploader.rb +2 -2
  14. data/app/uploaders/spotlight/avatar_uploader.rb +4 -0
  15. data/app/uploaders/spotlight/featured_image_uploader.rb +4 -0
  16. data/app/uploaders/spotlight/item_uploader.rb +4 -0
  17. data/app/uploaders/spotlight/masthead_uploader.rb +4 -0
  18. data/app/views/spotlight/pages/_view_type_group.html.erb +1 -1
  19. data/config/locales/spotlight.en.yml +3 -1
  20. data/lib/generators/spotlight/install_generator.rb +3 -3
  21. data/lib/generators/spotlight/templates/solr/config/schema.xml +347 -0
  22. data/lib/generators/spotlight/templates/solr/config/solrconfig.xml +163 -0
  23. data/lib/spotlight/engine.rb +9 -1
  24. data/lib/spotlight/version.rb +1 -1
  25. data/spec/controllers/spotlight/admin_users_controller_spec.rb +1 -1
  26. data/spec/controllers/spotlight/appearances_controller_spec.rb +20 -8
  27. data/spec/controllers/spotlight/roles_controller_spec.rb +2 -2
  28. data/spec/controllers/spotlight/solr_controller_spec.rb +12 -4
  29. data/spec/models/spotlight/resource_spec.rb +18 -0
  30. data/spec/spec_helper.rb +8 -1
  31. data/spec/support/helpers/controller_level_helpers.rb +12 -0
  32. data/spec/support/views/test_view_helpers.rb +4 -0
  33. data/spec/test_app_templates/Gemfile.extra +2 -0
  34. metadata +41 -19
  35. data/lib/generators/spotlight/templates/solr_conf/conf/schema.xml +0 -159
  36. data/lib/generators/spotlight/templates/solr_conf/conf/solrconfig.xml +0 -87
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a9f570da0859bafcdda5b278a6c091c078d3923a
4
- data.tar.gz: f949ab89b4ae716b88a2b1637ed74ed661706193
3
+ metadata.gz: 283d5c887e24780d4fa2c2eb0d8ea95c2716f383
4
+ data.tar.gz: 4510724deeb46830e4d3b1b97477332908935850
5
5
  SHA512:
6
- metadata.gz: c16e162aefe79ed7d01a1886c7636208cce5d82c5826e921a66ec0e440b41893588ff7c7eaf64bae4862fbbfd943deb20c9ad271074debfa8e4b93297c99bfb6
7
- data.tar.gz: 5c603afe59cc54c39e476eed12ca820d183007968b68cd1c01c18466216c721f8460bcffad3114dc65de902f1f09f5af2d406134fe4ac8d3c839eae36b26d9b4
6
+ metadata.gz: 79f52fe10b09af9e316d7a42a07a6f8cc55ff1fa06b83d64bddc2e9255c36fe1539ce5402bafd7ae6070cfd06b7bc612de5ab14548a6231b715f5e52a9393d38
7
+ data.tar.gz: 205927e362eee400c93ac200889701f948d681f5a2594ab85735ef5d79d56ae0471c809e731dbb7fd1f4114857abf535e79e63dfb36f0faa9ea35a8a87b6277b
@@ -82,8 +82,7 @@ module Spotlight
82
82
 
83
83
  def exhibit_search_facet_url(*args)
84
84
  options = args.extract_options!
85
- options = params.merge(options).except(:exhibit_id, :only_path)
86
-
85
+ options = params.to_unsafe_h.merge(options).except(:exhibit_id, :only_path)
87
86
  spotlight.facet_exhibit_catalog_url(current_exhibit, *args, options)
88
87
  end
89
88
  end
@@ -191,7 +191,7 @@ module Spotlight
191
191
  end
192
192
 
193
193
  def add_breadcrumb_with_search_params
194
- add_breadcrumb t(:'spotlight.catalog.breadcrumb.index'), request.fullpath if has_search_parameters?
194
+ add_breadcrumb t(:'spotlight.catalog.breadcrumb.index'), spotlight.search_exhibit_catalog_path(params.to_unsafe_h) if has_search_parameters?
195
195
  end
196
196
 
197
197
  # rubocop:disable Metrics/AbcSize
@@ -12,7 +12,7 @@ module Spotlight
12
12
  user.deliver_invitation # now deliver it when we have saved the role
13
13
  redirect_to :back, notice: t(:'helpers.submit.invite.invited')
14
14
  else
15
- redirect_to :back, alert: t(:'helpers.submit.role.batch_error')
15
+ redirect_to :back, alert: t(:'helpers.submit.role.batch_error', count: 1)
16
16
  end
17
17
  end
18
18
 
@@ -25,7 +25,7 @@ module Spotlight
25
25
  notice = any_deleted ? t(:'helpers.submit.role.destroyed') : t(:'helpers.submit.role.updated')
26
26
  redirect_to exhibit_roles_path(@exhibit), notice: notice
27
27
  else
28
- flash[:alert] = t(:'helpers.submit.role.batch_error')
28
+ flash[:alert] = t(:'helpers.submit.role.batch_error', count: exhibit_params[:roles_attributes].size)
29
29
  render action: 'index'
30
30
  end
31
31
  end
@@ -13,7 +13,7 @@ module Spotlight
13
13
 
14
14
  def create
15
15
  @search.attributes = search_params
16
- @search.query_params = params.except(:exhibit_id, :search, *blacklisted_search_session_params).reject { |_k, v| v.blank? }
16
+ @search.query_params = query_params
17
17
 
18
18
  if @search.save
19
19
  redirect_to :back, notice: t(:'helpers.submit.search.created', model: @search.class.model_name.human.downcase)
@@ -103,6 +103,10 @@ module Spotlight
103
103
  )
104
104
  end
105
105
 
106
+ def query_params
107
+ params.to_unsafe_h.with_indifferent_access.except(:exhibit_id, :search, *blacklisted_search_session_params).reject { |_k, v| v.blank? }
108
+ end
109
+
106
110
  def featured_image_attributes
107
111
  [:display, :source, :image, :remote_image_url, :document_global_id, :image_crop_x, :image_crop_y, :image_crop_w, :image_crop_h]
108
112
  end
@@ -13,6 +13,14 @@ module Spotlight
13
13
  ##
14
14
  # Mock activerecord class-level methods
15
15
  module ClassMethods
16
+ def has_attribute?(*_args)
17
+ false
18
+ end
19
+
20
+ def columns_hash
21
+ {}
22
+ end
23
+
16
24
  def base_class
17
25
  self
18
26
  end
@@ -10,7 +10,6 @@ module Spotlight
10
10
  include GlobalID::Identification
11
11
 
12
12
  included do
13
- extend ActsAsTaggableOn::Compatibility
14
13
  extend ActsAsTaggableOn::Taggable
15
14
 
16
15
  acts_as_taggable
@@ -336,7 +336,9 @@ module Spotlight
336
336
  end
337
337
 
338
338
  def value_to_boolean(v)
339
- if defined? ActiveRecord::Type
339
+ if defined? ActiveModel::Type::Boolean
340
+ ActiveModel::Type::Boolean.new.cast v
341
+ elsif defined? ActiveRecord::Type::Boolean
340
342
  # Rails 4.2+
341
343
  ActiveRecord::Type::Boolean.new.type_cast_from_database v
342
344
  else
@@ -17,10 +17,21 @@ module Spotlight
17
17
  return value unless field
18
18
 
19
19
  if field.ends_with? Spotlight::Engine.config.solr_fields.boolean_suffix
20
- ActiveRecord::Type::Boolean.new.type_cast_from_database(value)
20
+ value_to_boolean(value)
21
21
  else
22
22
  value
23
23
  end
24
24
  end
25
+
26
+ def value_to_boolean(v)
27
+ if defined? ActiveModel::Type::Boolean
28
+ ActiveModel::Type::Boolean.new.cast v
29
+ elsif defined? ActiveRecord::Type::Boolean
30
+ # Rails 4.2+
31
+ ActiveRecord::Type::Boolean.new.type_cast_from_database v
32
+ else
33
+ ActiveRecord::ConnectionAdapters::Column.value_to_boolean v
34
+ end
35
+ end
25
36
  end
26
37
  end
@@ -49,8 +49,19 @@ module Spotlight
49
49
  end
50
50
 
51
51
  def enqueued_at
52
- value = super
53
- Time.zone.parse(value) if value
52
+ if defined? ActiveModel::Type::DateTime
53
+ ActiveModel::Type::DateTime.new.cast(super)
54
+ else
55
+ ActiveRecord::Type::DateTime.new.type_cast_from_database(super)
56
+ end
57
+ end
58
+
59
+ def last_indexed_finished
60
+ if defined? ActiveModel::Type::DateTime
61
+ ActiveModel::Type::DateTime.new.cast(super)
62
+ else
63
+ ActiveRecord::Type::DateTime.new.type_cast_from_database(super)
64
+ end
54
65
  end
55
66
 
56
67
  def document_model
@@ -48,6 +48,10 @@ module Spotlight
48
48
  end
49
49
  end
50
50
 
51
+ def count
52
+ documents.size
53
+ end
54
+
51
55
  delegate :blacklight_config, to: :exhibit
52
56
 
53
57
  def display_masthead?
@@ -30,9 +30,9 @@ module Spotlight
30
30
  # Provide a default URL as a default if there hasn't been a file uploaded:
31
31
  # def default_url
32
32
  # # For Rails 3.1+ asset pipeline compatibility:
33
- # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
33
+ # # ActionController::Base.helpers.asset_path('fallback/' + [version_name, 'default.png'].compact.join('_'))
34
34
  #
35
- # "/images/fallback/" + [version_name, "default.png"].compact.join('_')
35
+ # "/images/fallback/" + [version_name, 'default.png'].compact.join('_')
36
36
  # end
37
37
 
38
38
  # Process files as they are uploaded:
@@ -16,5 +16,9 @@ module Spotlight
16
16
  def store_dir
17
17
  "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
18
18
  end
19
+
20
+ def default_url
21
+ ActionController::Base.helpers.asset_path('fallback/' + [version_name, 'default.png'].compact.join('_'))
22
+ end
19
23
  end
20
24
  end
@@ -21,5 +21,9 @@ module Spotlight
21
21
  def store_dir
22
22
  "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
23
23
  end
24
+
25
+ def default_url
26
+ ActionController::Base.helpers.asset_path('fallback/' + [version_name, 'default.png'].compact.join('_'))
27
+ end
24
28
  end
25
29
  end
@@ -17,5 +17,9 @@ module Spotlight
17
17
  def store_dir
18
18
  "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
19
19
  end
20
+
21
+ def default_url
22
+ ActionController::Base.helpers.asset_path('fallback/' + [version_name, 'default.png'].compact.join('_'))
23
+ end
20
24
  end
21
25
  end
@@ -14,5 +14,9 @@ module Spotlight
14
14
  def store_dir
15
15
  "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
16
16
  end
17
+
18
+ def default_url
19
+ ActionController::Base.helpers.asset_path('fallback/' + [version_name, 'default.png'].compact.join('_'))
20
+ end
17
21
  end
18
22
  end
@@ -4,7 +4,7 @@
4
4
  <span class="sr-only"><%= t('blacklight.search.view_title') %></span>
5
5
  <div class="view-type-group btn-group">
6
6
  <% views.each do |view, config| %>
7
- <%= link_to url_for(params.merge(:view => view)), :title => t("blacklight.search.view_title.#{view}", default: t("blacklight.search.view.#{view}", default: blacklight_config.view[view].title)), :class => "btn btn-default view-type-#{ view.to_s.parameterize } #{"active" if block_document_index_view_type(block) == view}" do %>
7
+ <%= link_to url_for(search_state.to_h.merge(view: view)), :title => t("blacklight.search.view_title.#{view}", default: t("blacklight.search.view.#{view}", default: blacklight_config.view[view].title)), :class => "btn btn-default view-type-#{ view.to_s.parameterize } #{"active" if block_document_index_view_type(block) == view}" do %>
8
8
  <%= render_view_type_group_icon view %>
9
9
  <span class="caption"><%= t("blacklight.search.view.#{view}") %></span>
10
10
  <% end %>
@@ -74,7 +74,9 @@ en:
74
74
  role:
75
75
  updated: "User has been updated."
76
76
  destroyed: "User has been removed."
77
- batch_error: "There was a problem saving the user(s)."
77
+ batch_error:
78
+ one: "There was a problem saving the user."
79
+ other: "There was a problem saving the users."
78
80
  invite:
79
81
  invited: 'User has been invited.'
80
82
  label:
@@ -17,7 +17,7 @@ module Spotlight
17
17
  end
18
18
 
19
19
  def friendly_id
20
- gem 'friendly_id'
20
+ gem 'friendly_id', github: 'norman/friendly_id'
21
21
  generate 'friendly_id'
22
22
  end
23
23
 
@@ -119,13 +119,13 @@ module Spotlight
119
119
  end
120
120
 
121
121
  def generate_social_share_button_initializer
122
- gem 'social-share-button'
122
+ gem 'social-share-button', github: 'cbeer/social-share-button', branch: 'on_load'
123
123
  directory 'config'
124
124
  end
125
125
 
126
126
  def add_solr_config_resources
127
127
  copy_file '.solr_wrapper.yml', '.solr_wrapper.yml'
128
- directory 'solr_conf'
128
+ directory 'solr'
129
129
  end
130
130
 
131
131
  def generate_devise_invitable
@@ -0,0 +1,347 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <schema name="Hydra" version="1.5">
3
+ <!-- NOTE: various comments and unused configuration possibilities have been purged
4
+ from this file. Please refer to http://wiki.apache.org/solr/SchemaXml,
5
+ as well as the default schema file included with Solr -->
6
+
7
+ <uniqueKey>id</uniqueKey>
8
+
9
+ <fields>
10
+ <field name="id" type="string" stored="true" indexed="true" multiValued="false" required="true"/>
11
+ <field name="_version_" type="long" indexed="true" stored="true"/>
12
+ <field name="timestamp" type="date" indexed="true" stored="true" default="NOW" multiValued="false"/>
13
+
14
+ <field name="lat" type="tdouble" stored="true" indexed="true" multiValued="false"/>
15
+ <field name="lng" type="tdouble" stored="true" indexed="true" multiValued="false"/>
16
+ <field name="original_pid_tesim" type="pid_text" stored="true" indexed="true" multiValued="true"/>
17
+
18
+ <field name="full_title_ng" type="text_en_ng" stored="false" indexed="true" multiValued="true"/>
19
+ <field name="id_ng" type="text_en_ng" stored="false" indexed="true" multiValued="false"/>
20
+
21
+ <dynamicField name="*_bbox" type="location_rpt" stored="true" indexed="true"/>
22
+ <!-- NOTE: not all possible Solr field types are represented in the dynamic fields -->
23
+
24
+ <!-- text (_t...) -->
25
+ <!--
26
+ <dynamicField name="*_ti" type="text" stored="false" indexed="true" multiValued="false"/>
27
+ <dynamicField name="*_tim" type="text" stored="false" indexed="true" multiValued="true"/>
28
+ -->
29
+ <dynamicField name="*_ts" type="text" stored="true" indexed="false" multiValued="false"/>
30
+ <dynamicField name="*_tsm" type="text" stored="true" indexed="false" multiValued="true"/>
31
+ <dynamicField name="*_tsi" type="text" stored="true" indexed="true" multiValued="false"/>
32
+ <dynamicField name="*_tsim" type="text" stored="true" indexed="true" multiValued="true"/>
33
+ <!--
34
+ <dynamicField name="*_tiv" type="text" stored="false" indexed="true" multiValued="false" termVectors="true" termPositions="true" termOffsets="true"/>
35
+ <dynamicField name="*_timv" type="text" stored="false" indexed="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true"/>
36
+ -->
37
+ <dynamicField name="*_tsiv" type="text" stored="true" indexed="true" multiValued="false" termVectors="true" termPositions="true" termOffsets="true"/>
38
+ <dynamicField name="*_tsimv" type="text" stored="true" indexed="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true"/>
39
+
40
+ <!-- English text (_te...) -->
41
+ <!--
42
+ <dynamicField name="*_tei" type="text_en" stored="false" indexed="true" multiValued="false"/>
43
+ <dynamicField name="*_teim" type="text_en" stored="false" indexed="true" multiValued="true"/>
44
+ -->
45
+ <dynamicField name="*_tes" type="text_en" stored="true" indexed="false" multiValued="false"/>
46
+ <dynamicField name="*_tesm" type="text_en" stored="true" indexed="false" multiValued="true"/>
47
+ <dynamicField name="*_tesi" type="text_en" stored="true" indexed="true" multiValued="false"/>
48
+ <dynamicField name="*_tesim" type="text_en" stored="true" indexed="true" multiValued="true"/>
49
+ <!--
50
+ <dynamicField name="*_teiv" type="text_en" stored="false" indexed="true" multiValued="false" termVectors="true" termPositions="true" termOffsets="true"/>
51
+ <dynamicField name="*_teimv" type="text_en" stored="false" indexed="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true"/>
52
+ -->
53
+ <dynamicField name="*_tesiv" type="text_en" stored="true" indexed="true" multiValued="false" termVectors="true" termPositions="true" termOffsets="true"/>
54
+ <dynamicField name="*_tesimv" type="text_en" stored="true" indexed="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true"/>
55
+
56
+ <!-- string (_s...) -->
57
+ <!--
58
+ <dynamicField name="*_si" type="string" stored="false" indexed="true" multiValued="false"/>
59
+ <dynamicField name="*_sim" type="string" stored="false" indexed="true" multiValued="true"/>
60
+ -->
61
+ <dynamicField name="*_ss" type="string" stored="true" indexed="false" multiValued="false"/>
62
+ <dynamicField name="*_ssm" type="string" stored="true" indexed="false" multiValued="true"/>
63
+ <dynamicField name="*_ssi" type="string" stored="true" indexed="true" multiValued="false"/>
64
+ <dynamicField name="*_ssim" type="string" stored="true" indexed="true" multiValued="true"/>
65
+ <!--
66
+ <dynamicField name="*_ssort" type="alphaSort" stored="false" indexed="true" multiValued="false"/>
67
+ -->
68
+
69
+ <!-- integer (_i...) -->
70
+ <!--
71
+ <dynamicField name="*_ii" type="int" stored="false" indexed="true" multiValued="false"/>
72
+ <dynamicField name="*_iim" type="int" stored="false" indexed="true" multiValued="true"/>
73
+ -->
74
+ <dynamicField name="*_is" type="int" stored="true" indexed="false" multiValued="false"/>
75
+ <dynamicField name="*_ism" type="int" stored="true" indexed="false" multiValued="true"/>
76
+ <dynamicField name="*_isi" type="int" stored="true" indexed="true" multiValued="false"/>
77
+ <dynamicField name="*_isim" type="int" stored="true" indexed="true" multiValued="true"/>
78
+
79
+ <!-- trie integer (_it...) (for faster range queries) -->
80
+ <!--
81
+ <dynamicField name="*_iti" type="tint" stored="false" indexed="true" multiValued="false"/>
82
+ <dynamicField name="*_itim" type="tint" stored="false" indexed="true" multiValued="true"/>
83
+ -->
84
+ <dynamicField name="*_its" type="tint" stored="true" indexed="false" multiValued="false"/>
85
+ <dynamicField name="*_itsm" type="tint" stored="true" indexed="false" multiValued="true"/>
86
+ <dynamicField name="*_itsi" type="tint" stored="true" indexed="true" multiValued="false"/>
87
+ <dynamicField name="*_itsim" type="tint" stored="true" indexed="true" multiValued="true"/>
88
+
89
+ <!-- date (_dt...) -->
90
+ <!-- The format for this date field is of the form 1995-12-31T23:59:59Z
91
+ Optional fractional seconds are allowed: 1995-12-31T23:59:59.999Z -->
92
+ <!--
93
+ <dynamicField name="*_dti" type="date" stored="false" indexed="true" multiValued="false"/>
94
+ <dynamicField name="*_dtim" type="date" stored="false" indexed="true" multiValued="true"/>
95
+ -->
96
+ <dynamicField name="*_dts" type="date" stored="true" indexed="false" multiValued="false"/>
97
+ <dynamicField name="*_dtsm" type="date" stored="true" indexed="false" multiValued="true"/>
98
+ <dynamicField name="*_dtsi" type="date" stored="true" indexed="true" multiValued="false"/>
99
+ <dynamicField name="*_dtsim" type="date" stored="true" indexed="true" multiValued="true"/>
100
+
101
+ <!-- trie date (_dtt...) (for faster range queries) -->
102
+ <!--
103
+ <dynamicField name="*_dtti" type="tdate" stored="false" indexed="true" multiValued="false"/>
104
+ <dynamicField name="*_dttim" type="tdate" stored="false" indexed="true" multiValued="true"/>
105
+ -->
106
+ <dynamicField name="*_dtts" type="tdate" stored="true" indexed="false" multiValued="false"/>
107
+ <dynamicField name="*_dttsm" type="tdate" stored="true" indexed="false" multiValued="true"/>
108
+ <dynamicField name="*_dttsi" type="tdate" stored="true" indexed="true" multiValued="false"/>
109
+ <dynamicField name="*_dttsim" type="tdate" stored="true" indexed="true" multiValued="true"/>
110
+
111
+ <!-- long (_l...) -->
112
+ <!--
113
+ <dynamicField name="*_li" type="long" stored="false" indexed="true" multiValued="false"/>
114
+ <dynamicField name="*_lim" type="long" stored="false" indexed="true" multiValued="true"/>
115
+ -->
116
+ <dynamicField name="*_ls" type="long" stored="true" indexed="false" multiValued="false"/>
117
+ <dynamicField name="*_lsm" type="long" stored="true" indexed="false" multiValued="true"/>
118
+ <dynamicField name="*_lsi" type="long" stored="true" indexed="true" multiValued="false"/>
119
+ <dynamicField name="*_lsim" type="long" stored="true" indexed="true" multiValued="true"/>
120
+
121
+ <!-- trie long (_lt...) (for faster range queries) -->
122
+ <!--
123
+ <dynamicField name="*_lti" type="tlong" stored="false" indexed="true" multiValued="false"/>
124
+ <dynamicField name="*_ltim" type="tlong" stored="false" indexed="true" multiValued="true"/>
125
+ -->
126
+ <dynamicField name="*_lts" type="tlong" stored="true" indexed="false" multiValued="false"/>
127
+ <dynamicField name="*_ltsm" type="tlong" stored="true" indexed="false" multiValued="true"/>
128
+ <dynamicField name="*_ltsi" type="tlong" stored="true" indexed="true" multiValued="false"/>
129
+ <dynamicField name="*_ltsim" type="tlong" stored="true" indexed="true" multiValued="true"/>
130
+
131
+ <!-- double (_db...) -->
132
+ <!--
133
+ <dynamicField name="*_dbi" type="double" stored="false" indexed="true" multiValued="false"/>
134
+ <dynamicField name="*_dbim" type="double" stored="false" indexed="true" multiValued="true"/>
135
+ -->
136
+ <dynamicField name="*_dbs" type="double" stored="true" indexed="false" multiValued="false"/>
137
+ <dynamicField name="*_dbsm" type="double" stored="true" indexed="false" multiValued="true"/>
138
+ <dynamicField name="*_dbsi" type="double" stored="true" indexed="true" multiValued="false"/>
139
+ <dynamicField name="*_dbsim" type="double" stored="true" indexed="true" multiValued="true"/>
140
+
141
+ <!-- trie double (_dbt...) (for faster range queries) -->
142
+ <!--
143
+ <dynamicField name="*_dbti" type="tdouble" stored="false" indexed="true" multiValued="false"/>
144
+ <dynamicField name="*_dbtim" type="tdouble" stored="false" indexed="true" multiValued="true"/>
145
+ -->
146
+ <dynamicField name="*_dbts" type="tdouble" stored="true" indexed="false" multiValued="false"/>
147
+ <dynamicField name="*_dbtsm" type="tdouble" stored="true" indexed="false" multiValued="true"/>
148
+ <dynamicField name="*_dbtsi" type="tdouble" stored="true" indexed="true" multiValued="false"/>
149
+ <dynamicField name="*_dbtsim" type="tdouble" stored="true" indexed="true" multiValued="true"/>
150
+
151
+ <!-- float (_f...) -->
152
+ <!--
153
+ <dynamicField name="*_fi" type="float" stored="false" indexed="true" multiValued="false"/>
154
+ <dynamicField name="*_fim" type="float" stored="false" indexed="true" multiValued="true"/>
155
+ -->
156
+ <dynamicField name="*_fs" type="float" stored="true" indexed="false" multiValued="false"/>
157
+ <dynamicField name="*_fsm" type="float" stored="true" indexed="false" multiValued="true"/>
158
+ <dynamicField name="*_fsi" type="float" stored="true" indexed="true" multiValued="false"/>
159
+ <dynamicField name="*_fsim" type="float" stored="true" indexed="true" multiValued="true"/>
160
+
161
+ <!-- trie float (_ft...) (for faster range queries) -->
162
+ <!--
163
+ <dynamicField name="*_fti" type="tfloat" stored="false" indexed="true" multiValued="false"/>
164
+ <dynamicField name="*_ftim" type="tfloat" stored="false" indexed="true" multiValued="true"/>
165
+ -->
166
+ <dynamicField name="*_fts" type="tfloat" stored="true" indexed="false" multiValued="false"/>
167
+ <dynamicField name="*_ftsm" type="tfloat" stored="true" indexed="false" multiValued="true"/>
168
+ <dynamicField name="*_ftsi" type="tfloat" stored="true" indexed="true" multiValued="false"/>
169
+ <dynamicField name="*_ftsim" type="tfloat" stored="true" indexed="true" multiValued="true"/>
170
+
171
+ <!-- boolean (_b...) -->
172
+ <!--
173
+ <dynamicField name="*_bi" type="boolean" stored="false" indexed="true" multiValued="false"/>
174
+ -->
175
+ <dynamicField name="*_bs" type="boolean" stored="true" indexed="false" multiValued="false"/>
176
+ <dynamicField name="*_bsi" type="boolean" stored="true" indexed="true" multiValued="false"/>
177
+
178
+ <!-- Type used to index the lat and lon components for the "location" FieldType -->
179
+ <!--
180
+ <dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false" />
181
+ -->
182
+
183
+ <!-- location (_ll...) -->
184
+ <!--
185
+ <dynamicField name="*_lli" type="location" stored="false" indexed="true" multiValued="false"/>
186
+ <dynamicField name="*_llim" type="location" stored="false" indexed="true" multiValued="true"/>
187
+ -->
188
+ <dynamicField name="*_lls" type="location" stored="true" indexed="false" multiValued="false"/>
189
+ <dynamicField name="*_llsm" type="location" stored="true" indexed="false" multiValued="true"/>
190
+ <dynamicField name="*_llsi" type="location" stored="true" indexed="true" multiValued="false"/>
191
+ <dynamicField name="*_llsim" type="location" stored="true" indexed="true" multiValued="true"/>
192
+
193
+ <!-- you must define copyField source and dest fields explicity or schemaBrowser doesn't work -->
194
+ <field name="all_text_timv" type="text" stored="false" indexed="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true"/>
195
+
196
+
197
+ </fields>
198
+
199
+
200
+ <!-- Above, multiple source fields are copied to the [text] field.
201
+ Another way to map multiple source fields to the same
202
+ destination field is to use the dynamic field syntax.
203
+ copyField also supports a maxChars to copy setting. -->
204
+
205
+ <copyField source="id" dest="id_ng" maxChars="3000"/>
206
+ <copyField source="full_title_tesim" dest="full_title_ng" maxChars="3000"/>
207
+ <copyField source="*_tesim" dest="all_text_timv" maxChars="3000"/>
208
+
209
+ <types>
210
+ <fieldType name="string" class="solr.StrField" sortMissingLast="true" />
211
+ <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>
212
+ <fieldType name="rand" class="solr.RandomSortField" omitNorms="true"/>
213
+
214
+ <!-- Default numeric field types. -->
215
+ <fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>
216
+ <fieldType name="float" class="solr.TrieFloatField" precisionStep="0" positionIncrementGap="0"/>
217
+ <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
218
+ <fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" positionIncrementGap="0"/>
219
+
220
+ <!-- trie numeric field types for faster range queries -->
221
+ <fieldType name="tint" class="solr.TrieIntField" precisionStep="8" positionIncrementGap="0"/>
222
+ <fieldType name="tfloat" class="solr.TrieFloatField" precisionStep="8" positionIncrementGap="0"/>
223
+ <fieldType name="tlong" class="solr.TrieLongField" precisionStep="8" positionIncrementGap="0"/>
224
+ <fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="8" positionIncrementGap="0"/>
225
+
226
+ <!-- The format for this date field is of the form 1995-12-31T23:59:59Z
227
+ Optional fractional seconds are allowed: 1995-12-31T23:59:59.999Z
228
+ -->
229
+ <fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"/>
230
+ <!-- A Trie based date field for faster date range queries and date faceting. -->
231
+ <fieldType name="tdate" class="solr.TrieDateField" precisionStep="6" positionIncrementGap="0"/>
232
+
233
+
234
+ <!-- This point type indexes the coordinates as separate fields (subFields)
235
+ If subFieldType is defined, it references a type, and a dynamic field
236
+ definition is created matching *___<typename>. Alternately, if
237
+ subFieldSuffix is defined, that is used to create the subFields.
238
+ Example: if subFieldType="double", then the coordinates would be
239
+ indexed in fields myloc_0___double,myloc_1___double.
240
+ Example: if subFieldSuffix="_d" then the coordinates would be indexed
241
+ in fields myloc_0_d,myloc_1_d
242
+ The subFields are an implementation detail of the fieldType, and end
243
+ users normally should not need to know about them.
244
+ -->
245
+ <fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/>
246
+
247
+ <!-- A specialized field for geospatial search. If indexed, this fieldType must not be multivalued. -->
248
+ <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
249
+
250
+ <!-- An alternative geospatial field type new to Solr 4. It supports multiValued and polygon shapes.
251
+ For more information about this and other Spatial fields new to Solr 4, see:
252
+ http://wiki.apache.org/solr/SolrAdaptersForLuceneSpatial4
253
+ -->
254
+ <fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"
255
+ geo="true" distErrPct="0.025" maxDistErr="0.000009" distanceUnits="degrees" />
256
+
257
+ <fieldType name="text" class="solr.TextField" omitNorms="false">
258
+ <analyzer>
259
+ <tokenizer class="solr.ICUTokenizerFactory"/>
260
+ <filter class="solr.ICUFoldingFilterFactory"/> <!-- NFKC, case folding, diacritics removed -->
261
+ <filter class="solr.TrimFilterFactory"/>
262
+ </analyzer>
263
+ </fieldType>
264
+
265
+ <!-- A text field that only splits on whitespace for exact matching of words -->
266
+ <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
267
+ <analyzer>
268
+ <tokenizer class="solr.WhitespaceTokenizerFactory"/>
269
+ <filter class="solr.TrimFilterFactory"/>
270
+ </analyzer>
271
+ </fieldType>
272
+
273
+ <!-- single token analyzed text, for sorting. Punctuation is significant. -->
274
+ <fieldtype name="alphaSort" class="solr.TextField" sortMissingLast="true" omitNorms="true">
275
+ <analyzer>
276
+ <tokenizer class="solr.KeywordTokenizerFactory" />
277
+ <filter class="solr.ICUFoldingFilterFactory"/>
278
+ <filter class="solr.TrimFilterFactory" />
279
+ </analyzer>
280
+ </fieldtype>
281
+
282
+ <!-- A text field with defaults appropriate for English -->
283
+ <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
284
+ <analyzer>
285
+ <tokenizer class="solr.ICUTokenizerFactory"/>
286
+ <filter class="solr.ICUFoldingFilterFactory"/> <!-- NFKC, case folding, diacritics removed -->
287
+ <filter class="solr.EnglishPossessiveFilterFactory"/>
288
+ <!-- EnglishMinimalStemFilterFactory is less aggressive than PorterStemFilterFactory: -->
289
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
290
+ <!--
291
+ <filter class="solr.PorterStemFilterFactory"/>
292
+ -->
293
+ <filter class="solr.TrimFilterFactory"/>
294
+ </analyzer>
295
+ </fieldType>
296
+
297
+ <!-- A text field with defaults appropriate for English an NGrams -->
298
+ <fieldType name="text_en_ng" class="solr.TextField" positionIncrementGap="100">
299
+ <analyzer type="index">
300
+ <tokenizer class="solr.ICUTokenizerFactory"/>
301
+ <filter class="solr.ICUFoldingFilterFactory"/> <!-- NFKC, case folding, diacritics removed -->
302
+ <filter class="solr.EnglishPossessiveFilterFactory"/>
303
+ <!-- EnglishMinimalStemFilterFactory is less aggressive than PorterStemFilterFactory: -->
304
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
305
+ <filter class="solr.TrimFilterFactory"/>
306
+ <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" />
307
+ </analyzer>
308
+
309
+ <analyzer type="index">
310
+ <tokenizer class="solr.ICUTokenizerFactory"/>
311
+ <filter class="solr.ICUFoldingFilterFactory"/> <!-- NFKC, case folding, diacritics removed -->
312
+ <filter class="solr.EnglishPossessiveFilterFactory"/>
313
+ <!-- EnglishMinimalStemFilterFactory is less aggressive than PorterStemFilterFactory: -->
314
+ <filter class="solr.EnglishMinimalStemFilterFactory"/>
315
+ <filter class="solr.TrimFilterFactory"/>
316
+ </analyzer>
317
+ </fieldType>
318
+
319
+ <fieldType name="pid_text" class="solr.TextField" positionIncrementGap="100">
320
+ <analyzer>
321
+ <tokenizer class="solr.KeywordTokenizerFactory"/>
322
+ </analyzer>
323
+ </fieldType>
324
+
325
+ <!-- queries for paths match documents at that path, or in descendent paths -->
326
+ <fieldType name="descendent_path" class="solr.TextField">
327
+ <analyzer type="index">
328
+ <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
329
+ </analyzer>
330
+ <analyzer type="query">
331
+ <tokenizer class="solr.KeywordTokenizerFactory" />
332
+ </analyzer>
333
+ </fieldType>
334
+
335
+ <!-- queries for paths match documents at that path, or in ancestor paths -->
336
+ <fieldType name="ancestor_path" class="solr.TextField">
337
+ <analyzer type="index">
338
+ <tokenizer class="solr.KeywordTokenizerFactory" />
339
+ </analyzer>
340
+ <analyzer type="query">
341
+ <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
342
+ </analyzer>
343
+ </fieldType>
344
+
345
+ </types>
346
+
347
+ </schema>