active-fedora 12.0.2 → 12.2.2

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 (78) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +63 -0
  3. data/.rubocop.yml +7 -7
  4. data/.rubocop_todo.yml +10 -100
  5. data/.solr_wrapper +1 -1
  6. data/CODE_OF_CONDUCT.md +36 -0
  7. data/CONTRIBUTING.md +23 -21
  8. data/Gemfile +1 -0
  9. data/History.txt +29 -29
  10. data/LICENSE +16 -14
  11. data/README.md +40 -29
  12. data/SUPPORT.md +5 -0
  13. data/active-fedora.gemspec +7 -7
  14. data/lib/active_fedora.rb +1 -1
  15. data/lib/active_fedora/aggregation/list_source.rb +3 -2
  16. data/lib/active_fedora/associations/builder/collection_association.rb +1 -0
  17. data/lib/active_fedora/associations/collection_association.rb +3 -0
  18. data/lib/active_fedora/associations/collection_proxy.rb +2 -0
  19. data/lib/active_fedora/associations/directly_contains_one_association.rb +1 -0
  20. data/lib/active_fedora/associations/indirectly_contains_association.rb +2 -0
  21. data/lib/active_fedora/associations/singular_association.rb +1 -0
  22. data/lib/active_fedora/attribute_methods.rb +1 -1
  23. data/lib/active_fedora/attribute_methods/read.rb +1 -1
  24. data/lib/active_fedora/attribute_methods/write.rb +1 -1
  25. data/lib/active_fedora/attributes.rb +1 -1
  26. data/lib/active_fedora/attributes/property_builder.rb +1 -0
  27. data/lib/active_fedora/callbacks.rb +7 -2
  28. data/lib/active_fedora/fedora.rb +8 -0
  29. data/lib/active_fedora/file.rb +5 -7
  30. data/lib/active_fedora/indexing.rb +3 -0
  31. data/lib/active_fedora/indexing/descendant_fetcher.rb +1 -1
  32. data/lib/active_fedora/indexing/descriptor.rb +1 -1
  33. data/lib/active_fedora/indexing/field_mapper.rb +4 -2
  34. data/lib/active_fedora/indexing/suffix.rb +7 -3
  35. data/lib/active_fedora/inheritable_accessors.rb +1 -0
  36. data/lib/active_fedora/loadable_from_json.rb +1 -0
  37. data/lib/active_fedora/nested_attributes.rb +1 -0
  38. data/lib/active_fedora/persistence.rb +14 -1
  39. data/lib/active_fedora/persistence/null_identifier_service.rb +11 -0
  40. data/lib/active_fedora/rake_support.rb +2 -2
  41. data/lib/active_fedora/reflection.rb +1 -1
  42. data/lib/active_fedora/relation.rb +14 -0
  43. data/lib/active_fedora/relation/delegation.rb +2 -1
  44. data/lib/active_fedora/relation/finder_methods.rb +1 -0
  45. data/lib/active_fedora/relation/merger.rb +1 -0
  46. data/lib/active_fedora/validations.rb +7 -0
  47. data/lib/active_fedora/version.rb +1 -1
  48. data/lib/active_fedora/with_metadata.rb +1 -0
  49. data/lib/active_fedora/with_metadata/metadata_node.rb +2 -1
  50. data/lib/generators/active_fedora/config/solr/templates/.solr_wrapper.yml +1 -1
  51. data/lib/generators/active_fedora/config/solr/templates/solr/{config → conf}/_rest_managed.json +0 -0
  52. data/lib/generators/active_fedora/config/solr/templates/solr/{config → conf}/admin-extra.html +0 -0
  53. data/lib/generators/active_fedora/config/solr/templates/solr/{config → conf}/elevate.xml +0 -0
  54. data/lib/generators/active_fedora/config/solr/templates/solr/{config → conf}/mapping-ISOLatin1Accent.txt +0 -0
  55. data/lib/generators/active_fedora/config/solr/templates/solr/{config → conf}/protwords.txt +0 -0
  56. data/lib/generators/active_fedora/config/solr/templates/solr/{config → conf}/schema.xml +64 -63
  57. data/lib/generators/active_fedora/config/solr/templates/solr/{config → conf}/scripts.conf +0 -0
  58. data/lib/generators/active_fedora/config/solr/templates/solr/{config → conf}/solrconfig.xml +4 -1
  59. data/lib/generators/active_fedora/config/solr/templates/solr/{config → conf}/spellings.txt +0 -0
  60. data/lib/generators/active_fedora/config/solr/templates/solr/{config → conf}/stopwords.txt +0 -0
  61. data/lib/generators/active_fedora/config/solr/templates/solr/{config → conf}/stopwords_en.txt +0 -0
  62. data/lib/generators/active_fedora/config/solr/templates/solr/{config → conf}/synonyms.txt +0 -0
  63. data/lib/generators/active_fedora/config/solr/templates/solr/{config → conf}/xslt/example.xsl +0 -0
  64. data/lib/generators/active_fedora/config/solr/templates/solr/{config → conf}/xslt/example_atom.xsl +0 -0
  65. data/lib/generators/active_fedora/config/solr/templates/solr/{config → conf}/xslt/example_rss.xsl +0 -0
  66. data/lib/generators/active_fedora/config/solr/templates/solr/{config → conf}/xslt/luke.xsl +0 -0
  67. data/lib/generators/active_fedora/config/solr/templates/solr_wrapper_test.yml +1 -1
  68. data/lib/generators/active_fedora/model/templates/datastream.rb.erb +1 -1
  69. data/spec/integration/file_spec.rb +1 -1
  70. data/spec/integration/relation_spec.rb +43 -0
  71. data/spec/spec_helper.rb +11 -9
  72. data/spec/support/an_active_model.rb +4 -0
  73. data/spec/unit/active_fedora/indexing/inserter_spec.rb +5 -0
  74. data/spec/unit/callback_spec.rb +8 -1
  75. data/spec/unit/file_spec.rb +17 -0
  76. data/spec/unit/validations_spec.rb +18 -0
  77. metadata +56 -54
  78. data/.travis.yml +0 -15
@@ -22,6 +22,7 @@ module ActiveFedora
22
22
  # @api
23
23
  # Given a field name, index_type, etc., returns the corresponding Solr name.
24
24
  # TODO field type is the input format, maybe we could just detect that?
25
+ # See https://github.com/samvera/active_fedora/issues/1338
25
26
  # @param [String] field_name the ruby (term) name which will get a suffix appended to become a Solr field name
26
27
  # @param opts - index_type is only needed if the FieldDescriptor requires it (e.g. :searcahble)
27
28
  # @return [String] name of the solr field, based on the params
@@ -69,6 +70,7 @@ module ActiveFedora
69
70
 
70
71
  # Is there a custom converter?
71
72
  # TODO instead of a custom converter, look for input data type and output data type. Create a few methods that can do that cast.
73
+ # See https://github.com/samvera/active_fedora/issues/1339
72
74
 
73
75
  value = if converter
74
76
  if converter.arity == 1
@@ -87,7 +89,7 @@ module ActiveFedora
87
89
  values = (results[name] ||= [])
88
90
  values << value unless value.nil? || values.include?(value)
89
91
  else
90
- Solrizer.logger.warn "Setting #{name} to `#{value}', but it already had `#{results[name]}'" if results[name] && Solrizer.logger
92
+ Rails.logger.warn "Setting #{name} to `#{value}', but it already had `#{results[name]}'" if results[name]
91
93
  results[name] = value
92
94
  end
93
95
  end
@@ -109,7 +111,7 @@ module ActiveFedora
109
111
  when Descriptor
110
112
  index_type
111
113
  else
112
- raise Solrizer::InvalidIndexDescriptor, "#{index_type.class} is not a valid indexer_type. Use a String, Symbol or Descriptor."
114
+ raise InvalidIndexDescriptor, "#{index_type.class} is not a valid indexer_type. Use a String, Symbol or Descriptor."
113
115
  end
114
116
 
115
117
  raise InvalidIndexDescriptor, "index type should be an Descriptor, you passed: #{index_type.class}" unless index_type.is_a? Descriptor
@@ -28,7 +28,7 @@ module ActiveFedora
28
28
  end
29
29
 
30
30
  def to_s
31
- raise Solrizer::InvalidIndexDescriptor, "Missing datatype for #{@fields}" unless data_type
31
+ raise InvalidIndexDescriptor, "Missing datatype for #{@fields}" unless data_type
32
32
 
33
33
  field_suffix = [config.suffix_delimiter]
34
34
 
@@ -45,12 +45,14 @@ module ActiveFedora
45
45
  end
46
46
 
47
47
  def self.config
48
+ # TODO: `:symbol' usage ought to be deprecated
49
+ # See https://github.com/samvera/active_fedora/issues/1334
48
50
  @config ||= OpenStruct.new fields: [:type, :stored, :indexed, :multivalued],
49
51
  suffix_delimiter: '_',
50
52
  type_suffix: (lambda do |fields|
51
53
  type = fields.first
52
54
  case type
53
- when :string, :symbol # TODO: `:symbol' usage ought to be deprecated
55
+ when :string, :symbol
54
56
  's'
55
57
  when :text
56
58
  't'
@@ -64,8 +66,10 @@ module ActiveFedora
64
66
  'b'
65
67
  when :long
66
68
  'lt'
69
+ when :float, :big_decimal
70
+ 'f'
67
71
  else
68
- raise Solrizer::InvalidIndexDescriptor, "Invalid datatype `#{type.inspect}'. Must be one of: :date, :time, :text, :text_en, :string, :symbol, :integer, :boolean"
72
+ raise InvalidIndexDescriptor, "Invalid datatype `#{type.inspect}'. Must be one of: :date, :time, :text, :text_en, :string, :symbol, :integer, :boolean"
69
73
  end
70
74
  end),
71
75
  stored_suffix: 's',
@@ -1,5 +1,6 @@
1
1
  # Similar to ActiveSupport.class_attribute but with a setter that doesn't use the #{name}= syntax
2
2
  # This preserves backward compatibility with the API in ActiveTriples
3
+ require "active_support/core_ext/module/remove_method"
3
4
 
4
5
  module ActiveFedora
5
6
  module InheritableAccessors
@@ -131,6 +131,7 @@ module ActiveFedora
131
131
  @resource = SolrBackedResource.new(self.class)
132
132
  self.attributes = adapt_attributes(attrs)
133
133
  # TODO: Should we clear the change tracking, or make this object Read-only?
134
+ # See https://github.com/samvera/active_fedora/issues/1342
134
135
 
135
136
  yield self if block_given?
136
137
 
@@ -64,6 +64,7 @@ module ActiveFedora
64
64
  reflection.autosave = true
65
65
  define_autosave_association_callbacks(reflection)
66
66
  ## TODO this ought to work, but doesn't seem to do the class inheritance right
67
+ # See https://github.com/samvera/active_fedora/issues/1343
67
68
 
68
69
  nested_attributes_options = self.nested_attributes_options.dup
69
70
  nested_attributes_options[association_name.to_sym] = options
@@ -2,6 +2,13 @@ module ActiveFedora
2
2
  # = Active Fedora Persistence
3
3
  module Persistence
4
4
  extend ActiveSupport::Concern
5
+ extend ActiveSupport::Autoload
6
+ autoload :NullIdentifierService
7
+
8
+ included do
9
+ class_attribute :identifier_service_class
10
+ self.identifier_service_class = NullIdentifierService
11
+ end
5
12
 
6
13
  def new_record?
7
14
  return true if @ldp_source.subject.nil?
@@ -209,7 +216,13 @@ module ActiveFedora
209
216
  end
210
217
 
211
218
  # Override to tie in an ID minting service
212
- def assign_id; end
219
+ def assign_id
220
+ identifier_service.mint
221
+ end
222
+
223
+ def identifier_service
224
+ @identifier_service ||= identifier_service_class.new
225
+ end
213
226
 
214
227
  # This is only used when creating a new record. If the object doesn't have an id
215
228
  # and assign_id can mint an id for the object, then assign it to the resource.
@@ -0,0 +1,11 @@
1
+ module ActiveFedora
2
+ module Persistence
3
+ # An identifier service that doesn't mint IDs, so that the autocreated
4
+ # identifiers from Fedora will be used.
5
+ class NullIdentifierService
6
+ # Effectively a no-op
7
+ # @return [NilClass]
8
+ def mint; end
9
+ end
10
+ end
11
+ end
@@ -16,12 +16,12 @@ def with_server(environment)
16
16
 
17
17
  SolrWrapper.wrap(load_config(:solr, environment, solr_defaults)) do |solr|
18
18
  ENV["SOLR_#{environment.upcase}_PORT"] = solr.port.to_s
19
- solr_config_path = File.join('solr', 'config')
19
+ solr_config_path = File.join('solr', 'conf')
20
20
  # Check to see if configs exist in a path relative to the working directory
21
21
  unless Dir.exist?(solr_config_path)
22
22
  $stderr.puts "Solr configuration not found at #{solr_config_path}. Using ActiveFedora defaults"
23
23
  # Otherwise use the configs delivered with ActiveFedora.
24
- solr_config_path = File.join(File.expand_path("../..", File.dirname(__FILE__)), 'lib', 'generators', 'active_fedora', 'config', 'solr', 'templates', 'solr', 'config')
24
+ solr_config_path = File.join(File.expand_path("../..", File.dirname(__FILE__)), 'lib', 'generators', 'active_fedora', 'config', 'solr', 'templates', 'solr', 'conf')
25
25
  end
26
26
  solr.with_collection(name: "hydra-#{environment}", dir: solr_config_path) do
27
27
  FcrepoWrapper.wrap(load_config(:fcrepo, environment, fcrepo_defaults)) do |fcrepo|
@@ -314,7 +314,7 @@ module ActiveFedora
314
314
  def collect_join_chain
315
315
  [self]
316
316
  end
317
- alias chain collect_join_chain # todo
317
+ alias chain collect_join_chain # TODO Remove alias, See https://github.com/samvera/active_fedora/issues/1347
318
318
 
319
319
  def has_inverse?
320
320
  inverse_name
@@ -144,6 +144,20 @@ module ActiveFedora
144
144
  @scope_for_create ||= where_values_hash.merge(create_with_value)
145
145
  end
146
146
 
147
+ def each
148
+ if loaded?
149
+ @records.each { |item| yield item } if block_given?
150
+ @records.to_enum
151
+ else
152
+ find_each(where_values) { |item| yield item } if block_given?
153
+ enum_for(:find_each, where_values)
154
+ end
155
+ end
156
+
157
+ def empty?
158
+ !any?
159
+ end
160
+
147
161
  private
148
162
 
149
163
  VALID_FIND_OPTIONS = [:order, :limit, :start, :conditions, :cast].freeze
@@ -13,7 +13,8 @@ module ActiveFedora
13
13
  :keep_if, :pop, :shift, :delete_at, :select!
14
14
  ].to_set
15
15
 
16
- delegate :length, :collect, :map, :each, :all?, :include?, :to_ary, to: :to_a
16
+ delegate :length, :map, :to_ary, to: :to_a
17
+ delegate :any?, :all?, :collect, :include?, to: :each
17
18
 
18
19
  protected
19
20
 
@@ -262,6 +262,7 @@ module ActiveFedora
262
262
  def field_name_for(key)
263
263
  if @klass.delegated_attributes.key?(key)
264
264
  # TODO: Check to see if `key' is a possible solr field for this class, if it isn't try :searchable instead
265
+ # See https://github.com/samvera/active_fedora/issues/1344
265
266
  ActiveFedora.index_field_mapper.solr_name(key, :stored_searchable, type: :string)
266
267
  elsif key == :id
267
268
  ActiveFedora.id_field
@@ -14,6 +14,7 @@ module ActiveFedora
14
14
 
15
15
  def merge
16
16
  # TODO: merge order
17
+ # See https://github.com/samvera/active_fedora/issues/1329
17
18
  relation.where_values += other.where_values
18
19
  relation
19
20
  end
@@ -92,5 +92,12 @@ module ActiveFedora
92
92
  def perform_validations(options = {}) # :nodoc:
93
93
  options[:validate] == false || valid?(options[:context])
94
94
  end
95
+
96
+ private
97
+
98
+ # Overwrite run validations to include callbacks.
99
+ def run_validations!
100
+ _run_validation_callbacks { super }
101
+ end
95
102
  end
96
103
  end
@@ -1,3 +1,3 @@
1
1
  module ActiveFedora
2
- VERSION = "12.0.2".freeze
2
+ VERSION = '12.2.2'.freeze
3
3
  end
@@ -20,6 +20,7 @@ module ActiveFedora
20
20
 
21
21
  def create_or_update(*)
22
22
  return unless super && !new_record?
23
+ # TODOs captured as https://github.com/samvera/active_fedora/issues/1331
23
24
  metadata_node.metadata_uri = described_by # TODO: only necessary if the URI was < > before
24
25
  metadata_node.save # TODO if changed?
25
26
  end
@@ -15,6 +15,7 @@ module ActiveFedora
15
15
  @file = file
16
16
  super(file.uri, ldp_source.graph)
17
17
  return unless self.class.type && !type.include?(self.class.type)
18
+ attributes_changed_by_setter[:type] = true if type.present?
18
19
  # Workaround for https://github.com/ActiveTriples/ActiveTriples/issues/123
19
20
  get_values(:type) << self.class.type
20
21
  end
@@ -54,7 +55,7 @@ module ActiveFedora
54
55
 
55
56
  def changed_attributes
56
57
  super.tap do |changed|
57
- changed['type'] = true if type.present? && new_record?
58
+ changed.merge('type' => true) if type.present? && new_record?
58
59
  end
59
60
  end
60
61
 
@@ -4,5 +4,5 @@
4
4
  instance_dir: tmp/solr-development
5
5
  collection:
6
6
  persist: true
7
- dir: solr/config/
7
+ dir: solr/conf/
8
8
  name: hydra-development
@@ -48,43 +48,47 @@
48
48
  <schema name="Hydra Demo Index" version="1.5">
49
49
  <!-- attribute "name" is the name of this schema and is only used for display purposes.
50
50
  Applications should change this to reflect the nature of the search collection.
51
- version="1.4" is Solr's version number for the schema syntax and semantics. It should
51
+ version="1.5" is Solr's version number for the schema syntax and semantics. It should
52
52
  not normally be changed by applications.
53
53
  1.0: multiValued attribute did not exist, all fields are multiValued by nature
54
54
  1.1: multiValued attribute introduced, false by default
55
55
  1.2: omitTermFreqAndPositions attribute introduced, true by default except for text fields.
56
56
  1.3: removed optional field compress feature
57
57
  1.4: default auto-phrase (QueryParser feature) to off
58
+ 1.5: omitNorms defaults to true for primitive field types (int, float, boolean, string...)
59
+ # TODO 1.6: useDocValuesAsStored defaults to true.
60
+ # See https://github.com/samvera/active_fedora/issues/1346
58
61
  -->
59
62
 
60
63
  <types>
61
64
  <fieldType name="string" class="solr.StrField" sortMissingLast="true" />
62
- <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>
65
+ <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>
63
66
  <fieldType name="rand" class="solr.RandomSortField" omitNorms="true"/>
64
-
67
+
65
68
  <!-- Default numeric field types. -->
66
- <fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>
67
- <fieldType name="float" class="solr.TrieFloatField" precisionStep="0" positionIncrementGap="0"/>
68
- <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
69
- <fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" positionIncrementGap="0"/>
70
-
71
- <!-- trie numeric field types for faster range queries -->
72
- <fieldType name="tint" class="solr.TrieIntField" precisionStep="8" positionIncrementGap="0"/>
73
- <fieldType name="tfloat" class="solr.TrieFloatField" precisionStep="8" positionIncrementGap="0"/>
74
- <fieldType name="tlong" class="solr.TrieLongField" precisionStep="8" positionIncrementGap="0"/>
75
- <fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="8" positionIncrementGap="0"/>
76
-
69
+ <fieldType name="int" class="solr.IntPointField" docValues="true"/>
70
+ <fieldType name="float" class="solr.FloatPointField" docValues="true"/>
71
+ <fieldType name="long" class="solr.LongPointField" docValues="true"/>
72
+ <fieldType name="double" class="solr.DoublePointField" docValues="true"/>
73
+
74
+ <!-- PointField numeric field types for faster range queries -->
75
+ <fieldType name="tint" class="solr.IntPointField" docValues="true"/>
76
+ <fieldType name="tfloat" class="solr.FloatPointField" docValues="true"/>
77
+ <fieldType name="tlong" class="solr.LongPointField" docValues="true"/>
78
+ <fieldType name="tdouble" class="solr.DoublePointField" docValues="true"/>
79
+
77
80
  <!-- The format for this date field is of the form 1995-12-31T23:59:59Z
78
81
  Optional fractional seconds are allowed: 1995-12-31T23:59:59.999Z
79
82
  -->
80
- <fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"/>
81
- <!-- A Trie based date field for faster date range queries and date faceting. -->
82
- <fieldType name="tdate" class="solr.TrieDateField" precisionStep="6" positionIncrementGap="0"/>
83
-
84
-
83
+ <fieldType name="date" class="solr.DatePointField" docValues="true"/>
84
+ <!-- A PointField based date field for faster date range queries and date faceting. -->
85
+ <fieldType name="tdate" class="solr.DatePointField" docValues="true"/>
86
+ <!-- A DateRange based date field for truly faster date range queries. -->
87
+ <fieldType name="dateRange" class="solr.DateRangeField"/>
88
+
85
89
  <!-- This point type indexes the coordinates as separate fields (subFields)
86
90
  If subFieldType is defined, it references a type, and a dynamic field
87
- definition is created matching *___<typename>. Alternately, if
91
+ definition is created matching *___<typename>. Alternately, if
88
92
  subFieldSuffix is defined, that is used to create the subFields.
89
93
  Example: if subFieldType="double", then the coordinates would be
90
94
  indexed in fields myloc_0___double,myloc_1___double.
@@ -94,17 +98,14 @@
94
98
  users normally should not need to know about them.
95
99
  -->
96
100
  <fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/>
97
-
98
- <!-- A specialized field for geospatial search. If indexed, this fieldType must not be multivalued. -->
99
- <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
100
-
101
- <!-- An alternative geospatial field type new to Solr 4. It supports multiValued and polygon shapes.
101
+
102
+ <!-- A geospatial field type new to Solr 4. It supports multiValued and polygon shapes.
102
103
  For more information about this and other Spatial fields new to Solr 4, see:
103
104
  http://wiki.apache.org/solr/SolrAdaptersForLuceneSpatial4
104
105
  -->
105
106
  <fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"
106
107
  geo="true" distErrPct="0.025" maxDistErr="0.000009" distanceUnits="degrees" />
107
-
108
+
108
109
  <fieldType name="text" class="solr.TextField" omitNorms="false">
109
110
  <analyzer>
110
111
  <tokenizer class="solr.ICUTokenizerFactory"/>
@@ -112,7 +113,7 @@
112
113
  <filter class="solr.TrimFilterFactory"/>
113
114
  </analyzer>
114
115
  </fieldType>
115
-
116
+
116
117
  <!-- A text field that only splits on whitespace for exact matching of words -->
117
118
  <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
118
119
  <analyzer>
@@ -120,7 +121,7 @@
120
121
  <filter class="solr.TrimFilterFactory"/>
121
122
  </analyzer>
122
123
  </fieldType>
123
-
124
+
124
125
  <!-- single token analyzed text, for sorting. Punctuation is significant. -->
125
126
  <fieldtype name="alphaSort" class="solr.TextField" sortMissingLast="true" omitNorms="true">
126
127
  <analyzer>
@@ -129,7 +130,7 @@
129
130
  <filter class="solr.TrimFilterFactory" />
130
131
  </analyzer>
131
132
  </fieldtype>
132
-
133
+
133
134
  <!-- A text field with defaults appropriate for English -->
134
135
  <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
135
136
  <analyzer>
@@ -144,7 +145,7 @@
144
145
  <filter class="solr.TrimFilterFactory"/>
145
146
  </analyzer>
146
147
  </fieldType>
147
-
148
+
148
149
  <!-- queries for paths match documents at that path, or in descendent paths -->
149
150
  <fieldType name="descendent_path" class="solr.TextField">
150
151
  <analyzer type="index">
@@ -154,7 +155,7 @@
154
155
  <tokenizer class="solr.KeywordTokenizerFactory" />
155
156
  </analyzer>
156
157
  </fieldType>
157
-
158
+
158
159
  <!-- queries for paths match documents at that path, or in ancestor paths -->
159
160
  <fieldType name="ancestor_path" class="solr.TextField">
160
161
  <analyzer type="index">
@@ -168,7 +169,6 @@
168
169
  <fieldType class="solr.TextField" name="textSuggest" positionIncrementGap="100">
169
170
  <analyzer>
170
171
  <tokenizer class="solr.KeywordTokenizerFactory"/>
171
- <filter class="solr.StandardFilterFactory"/>
172
172
  <filter class="solr.LowerCaseFilterFactory"/>
173
173
  <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
174
174
  </analyzer>
@@ -179,12 +179,12 @@
179
179
  <fields>
180
180
  <!-- If you remove this field, you must _also_ disable the update log in solrconfig.xml
181
181
  or Solr won't start. _version_ and update log are required for SolrCloud
182
- -->
182
+ -->
183
183
  <field name="_version_" type="long" indexed="true" stored="true"/>
184
-
184
+
185
185
  <field name="id" type="string" stored="true" indexed="true" multiValued="false" required="true"/>
186
186
  <field name="timestamp" type="date" indexed="true" stored="true" default="NOW" multiValued="false"/>
187
-
187
+
188
188
  <field name="lat" type="tdouble" stored="true" indexed="true" multiValued="false"/>
189
189
  <field name="lng" type="tdouble" stored="true" indexed="true" multiValued="false"/>
190
190
 
@@ -201,7 +201,7 @@
201
201
  <dynamicField name="*_timv" type="text" stored="false" indexed="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true"/>
202
202
  <dynamicField name="*_tsiv" type="text" stored="true" indexed="true" multiValued="false" termVectors="true" termPositions="true" termOffsets="true"/>
203
203
  <dynamicField name="*_tsimv" type="text" stored="true" indexed="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true"/>
204
-
204
+
205
205
  <!-- English text (_te...) -->
206
206
  <dynamicField name="*_tei" type="text_en" stored="false" indexed="true" multiValued="false"/>
207
207
  <dynamicField name="*_teim" type="text_en" stored="false" indexed="true" multiValued="true"/>
@@ -213,7 +213,7 @@
213
213
  <dynamicField name="*_teimv" type="text_en" stored="false" indexed="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true"/>
214
214
  <dynamicField name="*_tesiv" type="text_en" stored="true" indexed="true" multiValued="false" termVectors="true" termPositions="true" termOffsets="true"/>
215
215
  <dynamicField name="*_tesimv" type="text_en" stored="true" indexed="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true"/>
216
-
216
+
217
217
  <!-- string (_s...) -->
218
218
  <dynamicField name="*_si" type="string" stored="false" indexed="true" multiValued="false"/>
219
219
  <dynamicField name="*_sim" type="string" stored="false" indexed="true" multiValued="true"/>
@@ -222,7 +222,7 @@
222
222
  <dynamicField name="*_ssi" type="string" stored="true" indexed="true" multiValued="false"/>
223
223
  <dynamicField name="*_ssim" type="string" stored="true" indexed="true" multiValued="true"/>
224
224
  <dynamicField name="*_ssort" type="alphaSort" stored="false" indexed="true" multiValued="false"/>
225
-
225
+
226
226
  <!-- integer (_i...) -->
227
227
  <dynamicField name="*_ii" type="int" stored="false" indexed="true" multiValued="false"/>
228
228
  <dynamicField name="*_iim" type="int" stored="false" indexed="true" multiValued="true"/>
@@ -230,15 +230,15 @@
230
230
  <dynamicField name="*_ism" type="int" stored="true" indexed="false" multiValued="true"/>
231
231
  <dynamicField name="*_isi" type="int" stored="true" indexed="true" multiValued="false"/>
232
232
  <dynamicField name="*_isim" type="int" stored="true" indexed="true" multiValued="true"/>
233
-
234
- <!-- trie integer (_it...) (for faster range queries) -->
233
+
234
+ <!-- IntegerPointField (_it...) (for faster range queries) -->
235
235
  <dynamicField name="*_iti" type="tint" stored="false" indexed="true" multiValued="false"/>
236
236
  <dynamicField name="*_itim" type="tint" stored="false" indexed="true" multiValued="true"/>
237
237
  <dynamicField name="*_its" type="tint" stored="true" indexed="false" multiValued="false"/>
238
238
  <dynamicField name="*_itsm" type="tint" stored="true" indexed="false" multiValued="true"/>
239
239
  <dynamicField name="*_itsi" type="tint" stored="true" indexed="true" multiValued="false"/>
240
240
  <dynamicField name="*_itsim" type="tint" stored="true" indexed="true" multiValued="true"/>
241
-
241
+
242
242
  <!-- date (_dt...) -->
243
243
  <!-- The format for this date field is of the form 1995-12-31T23:59:59Z
244
244
  Optional fractional seconds are allowed: 1995-12-31T23:59:59.999Z -->
@@ -248,15 +248,24 @@
248
248
  <dynamicField name="*_dtsm" type="date" stored="true" indexed="false" multiValued="true"/>
249
249
  <dynamicField name="*_dtsi" type="date" stored="true" indexed="true" multiValued="false"/>
250
250
  <dynamicField name="*_dtsim" type="date" stored="true" indexed="true" multiValued="true"/>
251
-
252
- <!-- trie date (_dtt...) (for faster range queries) -->
251
+
252
+ <!-- DatePointField (_dtt...) (for faster range queries) -->
253
253
  <dynamicField name="*_dtti" type="tdate" stored="false" indexed="true" multiValued="false"/>
254
254
  <dynamicField name="*_dttim" type="tdate" stored="false" indexed="true" multiValued="true"/>
255
255
  <dynamicField name="*_dtts" type="tdate" stored="true" indexed="false" multiValued="false"/>
256
256
  <dynamicField name="*_dttsm" type="tdate" stored="true" indexed="false" multiValued="true"/>
257
257
  <dynamicField name="*_dttsi" type="tdate" stored="true" indexed="true" multiValued="false"/>
258
258
  <dynamicField name="*_dttsim" type="tdate" stored="true" indexed="true" multiValued="true"/>
259
-
259
+
260
+
261
+ <!-- date range (_dr...) (for faster AND better range queries) -->
262
+ <dynamicField name="*_dri" type="dateRange" stored="false" indexed="true" multiValued="false"/>
263
+ <dynamicField name="*_drim" type="dateRange" stored="false" indexed="true" multiValued="true"/>
264
+ <dynamicField name="*_drs" type="dateRange" stored="true" indexed="false" multiValued="false"/>
265
+ <dynamicField name="*_drsm" type="dateRange" stored="true" indexed="false" multiValued="true"/>
266
+ <dynamicField name="*_drsi" type="dateRange" stored="true" indexed="true" multiValued="false"/>
267
+ <dynamicField name="*_drsim" type="dateRange" stored="true" indexed="true" multiValued="true"/>
268
+
260
269
  <!-- long (_l...) -->
261
270
  <dynamicField name="*_li" type="long" stored="false" indexed="true" multiValued="false"/>
262
271
  <dynamicField name="*_lim" type="long" stored="false" indexed="true" multiValued="true"/>
@@ -264,15 +273,15 @@
264
273
  <dynamicField name="*_lsm" type="long" stored="true" indexed="false" multiValued="true"/>
265
274
  <dynamicField name="*_lsi" type="long" stored="true" indexed="true" multiValued="false"/>
266
275
  <dynamicField name="*_lsim" type="long" stored="true" indexed="true" multiValued="true"/>
267
-
268
- <!-- trie long (_lt...) (for faster range queries) -->
276
+
277
+ <!-- LongPointField (_lt...) (for faster range queries) -->
269
278
  <dynamicField name="*_lti" type="tlong" stored="false" indexed="true" multiValued="false"/>
270
279
  <dynamicField name="*_ltim" type="tlong" stored="false" indexed="true" multiValued="true"/>
271
280
  <dynamicField name="*_lts" type="tlong" stored="true" indexed="false" multiValued="false"/>
272
281
  <dynamicField name="*_ltsm" type="tlong" stored="true" indexed="false" multiValued="true"/>
273
282
  <dynamicField name="*_ltsi" type="tlong" stored="true" indexed="true" multiValued="false"/>
274
283
  <dynamicField name="*_ltsim" type="tlong" stored="true" indexed="true" multiValued="true"/>
275
-
284
+
276
285
  <!-- double (_db...) -->
277
286
  <dynamicField name="*_dbi" type="double" stored="false" indexed="true" multiValued="false"/>
278
287
  <dynamicField name="*_dbim" type="double" stored="false" indexed="true" multiValued="true"/>
@@ -280,15 +289,15 @@
280
289
  <dynamicField name="*_dbsm" type="double" stored="true" indexed="false" multiValued="true"/>
281
290
  <dynamicField name="*_dbsi" type="double" stored="true" indexed="true" multiValued="false"/>
282
291
  <dynamicField name="*_dbsim" type="double" stored="true" indexed="true" multiValued="true"/>
283
-
284
- <!-- trie double (_dbt...) (for faster range queries) -->
292
+
293
+ <!-- DoublePointField (_dbt...) (for faster range queries) -->
285
294
  <dynamicField name="*_dbti" type="tdouble" stored="false" indexed="true" multiValued="false"/>
286
295
  <dynamicField name="*_dbtim" type="tdouble" stored="false" indexed="true" multiValued="true"/>
287
296
  <dynamicField name="*_dbts" type="tdouble" stored="true" indexed="false" multiValued="false"/>
288
297
  <dynamicField name="*_dbtsm" type="tdouble" stored="true" indexed="false" multiValued="true"/>
289
298
  <dynamicField name="*_dbtsi" type="tdouble" stored="true" indexed="true" multiValued="false"/>
290
299
  <dynamicField name="*_dbtsim" type="tdouble" stored="true" indexed="true" multiValued="true"/>
291
-
300
+
292
301
  <!-- float (_f...) -->
293
302
  <dynamicField name="*_fi" type="float" stored="false" indexed="true" multiValued="false"/>
294
303
  <dynamicField name="*_fim" type="float" stored="false" indexed="true" multiValued="true"/>
@@ -296,31 +305,23 @@
296
305
  <dynamicField name="*_fsm" type="float" stored="true" indexed="false" multiValued="true"/>
297
306
  <dynamicField name="*_fsi" type="float" stored="true" indexed="true" multiValued="false"/>
298
307
  <dynamicField name="*_fsim" type="float" stored="true" indexed="true" multiValued="true"/>
299
-
300
- <!-- trie float (_ft...) (for faster range queries) -->
308
+
309
+ <!-- FloatPointField (_ft...) (for faster range queries) -->
301
310
  <dynamicField name="*_fti" type="tfloat" stored="false" indexed="true" multiValued="false"/>
302
311
  <dynamicField name="*_ftim" type="tfloat" stored="false" indexed="true" multiValued="true"/>
303
312
  <dynamicField name="*_fts" type="tfloat" stored="true" indexed="false" multiValued="false"/>
304
313
  <dynamicField name="*_ftsm" type="tfloat" stored="true" indexed="false" multiValued="true"/>
305
314
  <dynamicField name="*_ftsi" type="tfloat" stored="true" indexed="true" multiValued="false"/>
306
315
  <dynamicField name="*_ftsim" type="tfloat" stored="true" indexed="true" multiValued="true"/>
307
-
316
+
308
317
  <!-- boolean (_b...) -->
309
318
  <dynamicField name="*_bi" type="boolean" stored="false" indexed="true" multiValued="false"/>
310
319
  <dynamicField name="*_bs" type="boolean" stored="true" indexed="false" multiValued="false"/>
311
320
  <dynamicField name="*_bsi" type="boolean" stored="true" indexed="true" multiValued="false"/>
312
-
321
+
313
322
  <!-- Type used to index the lat and lon components for the "location" FieldType -->
314
323
  <dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false" />
315
324
 
316
- <!-- location (_ll...) -->
317
- <dynamicField name="*_lli" type="location" stored="false" indexed="true" multiValued="false"/>
318
- <dynamicField name="*_llim" type="location" stored="false" indexed="true" multiValued="true"/>
319
- <dynamicField name="*_lls" type="location" stored="true" indexed="false" multiValued="false"/>
320
- <dynamicField name="*_llsm" type="location" stored="true" indexed="false" multiValued="true"/>
321
- <dynamicField name="*_llsi" type="location" stored="true" indexed="true" multiValued="false"/>
322
- <dynamicField name="*_llsim" type="location" stored="true" indexed="true" multiValued="true"/>
323
-
324
325
  <dynamicField name="*suggest" type="textSuggest" indexed="true" stored="false" multiValued="true" />
325
326
 
326
327
  <!-- you must define copyField source and dest fields explicity or schemaBrowser doesn't work -->
@@ -329,7 +330,7 @@
329
330
 
330
331
  </fields>
331
332
 
332
- <!-- Field to use to determine and enforce document uniqueness.
333
+ <!-- Field to use to determine and enforce document uniqueness.
333
334
  Unless this field is marked with required="false", it will be a required field
334
335
  -->
335
336
  <uniqueKey>id</uniqueKey>