blacklight-spotlight 0.20.3 → 0.21.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.
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>