active-fedora 5.0.0.rc2 → 5.0.0.rc3

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.
@@ -50,15 +50,7 @@ java -jar start.jar
50
50
  Then open a new terminal, go to your ActiveFedora source directory, and import fedora's demo objects.
51
51
 
52
52
  <pre>
53
- export FEDORA_HOME=/path/to/hydra/jetty/fedora/default
54
- rake active_fedora:load_fixtures environment=test
55
- </pre>
56
-
57
- This does the equivalent of:
58
-
59
- <pre>
60
- $FEDORA_HOME/client/bin/fedora-ingest-demos.sh localhost 8983 fedoraAdmin fedoraAdmin http
61
- rake af:import_fixture pid=hydrangea:fixture_mods_article1 environment=test
53
+ rake active_fedora:fixtures environment=test
62
54
  </pre>
63
55
 
64
56
  Now you're ready to run the tests. In the directory where active_fedora is installed, run
@@ -22,7 +22,6 @@ Gem::Specification.new do |s|
22
22
  s.add_dependency("activesupport", '>= 3.0.0')
23
23
  s.add_dependency("builder", '~> 3.0.0')
24
24
  s.add_dependency("mediashelf-loggable")
25
- s.add_dependency("equivalent-xml")
26
25
  s.add_dependency("rubydora", '~>0.5.13')
27
26
  s.add_dependency("rdf")
28
27
  s.add_dependency("rdf-rdfxml", '~>0.3.8')
@@ -32,6 +31,7 @@ Gem::Specification.new do |s|
32
31
  s.add_development_dependency("rake")
33
32
  s.add_development_dependency("jettywrapper", ">=1.2.0")
34
33
  s.add_development_dependency("rspec", ">= 2.9.0")
34
+ s.add_development_dependency("equivalent-xml")
35
35
  s.add_development_dependency("mocha", "0.10.5")
36
36
 
37
37
  s.files = `git ls-files`.split("\n")
@@ -5,6 +5,7 @@ require 'active_fedora/rubydora_connection'
5
5
  require 'active_support/core_ext/class/attribute'
6
6
  require 'active_support/core_ext/object'
7
7
  require 'active_support/core_ext/hash/indifferent_access'
8
+ require 'rdf'
8
9
 
9
10
  SOLR_DOCUMENT_ID = ActiveFedora::SolrService.id_field unless defined?(SOLR_DOCUMENT_ID)
10
11
  ENABLE_SOLR_UPDATES = true unless defined?(ENABLE_SOLR_UPDATES)
@@ -92,7 +92,7 @@ module ActiveFedora
92
92
  # The method reference callbacks work by specifying a protected or private method available in the object, like this:
93
93
  #
94
94
  # class Topic < ActiveFedora::Base
95
- # before_delete :delete_parents
95
+ # before_destroy :delete_parents
96
96
  #
97
97
  # private
98
98
  # def delete_parents
@@ -168,14 +168,14 @@ module ActiveFedora
168
168
  # pass a "method string", which will then be evaluated within the binding of the callback. Example:
169
169
  #
170
170
  # class Topic < ActiveFedora::Base
171
- # before_delete 'self.class.delete_all "parent_id = #{id}"'
171
+ # before_destroy 'self.class.delete_all "parent_id = #{id}"'
172
172
  # end
173
173
  #
174
174
  # Notice that single quotes (') are used so the <tt>#{id}</tt> part isn't evaluated until the callback
175
175
  # is triggered. Also note that these inline callbacks can be stacked just like the regular ones:
176
176
  #
177
177
  # class Topic < ActiveFedora::Base
178
- # before_delete 'self.class.delete_all "parent_id = #{id}"',
178
+ # before_destroy 'self.class.delete_all "parent_id = #{id}"',
179
179
  # 'puts "Evaluated after parents are deleted"'
180
180
  # end
181
181
  #
@@ -217,7 +217,7 @@ module ActiveFedora
217
217
  :after_initialize, :after_find, :before_validation, :after_validation,
218
218
  :before_save, :around_save, :after_save, :before_create, :around_create,
219
219
  :after_create, :before_update, :around_update, :after_update,
220
- :before_delete, :around_delete, :after_delete
220
+ :before_destroy, :around_destroy, :after_destroy
221
221
  ]
222
222
 
223
223
  included do
@@ -225,14 +225,13 @@ module ActiveFedora
225
225
  include ActiveModel::Validations::Callbacks
226
226
 
227
227
  define_model_callbacks :initialize, :find, :only => :after
228
- define_model_callbacks :save, :create, :update, :delete
228
+ define_model_callbacks :save, :create, :update, :destroy
229
229
  end
230
230
 
231
231
  def destroy #:nodoc:
232
232
  run_callbacks(:destroy) { super }
233
233
  end
234
234
 
235
-
236
235
  private
237
236
 
238
237
  def persist #:nodoc:
@@ -65,22 +65,6 @@ module ActiveFedora
65
65
  # fieldname_append(val)
66
66
  # *appends val to the values array.
67
67
  module ClassMethods
68
-
69
- # Retrieve the Fedora object with the given pid and deserialize it as an instance of the current model
70
- # Note that you can actually pass a pid into this method, regardless of Fedora model type, and
71
- # ActiveFedora will try to parse the results into the current type of self, which may or may not be what you want.
72
- #
73
- # @param [String] pid of the object to load
74
- #
75
- # @example this will return an instance of Book, even if the object hydra:dataset1 asserts that it is a Dataset
76
- # Book.load_instance("hydra:dataset1")
77
- def load_instance(pid)
78
- ActiveSupport::Deprecation.warn("load_instance is deprecated. Use find instead")
79
- find(pid)
80
- end
81
-
82
-
83
-
84
68
  # Returns a suitable uri object for :has_model
85
69
  # Should reverse Model#from_class_uri
86
70
  def to_class_uri(attrs = {})
@@ -175,13 +159,6 @@ module ActiveFedora
175
159
  !inner.new?
176
160
  end
177
161
 
178
- #@deprecated
179
- def find_model(pid)
180
- ActiveSupport::Deprecation.warn("find_model is deprecated. Use find instead")
181
- find(pid)
182
- end
183
-
184
-
185
162
  # Get a count of the number of objects from solr
186
163
  # Takes :conditions as an argument
187
164
  def count(args = {})
@@ -190,122 +167,6 @@ module ActiveFedora
190
167
  SolrService.query(q.join(' AND '), :raw=>true, :rows=>0)['response']['numFound']
191
168
  end
192
169
 
193
- #@deprecated
194
- #Sends a query directly to SolrService
195
- def solr_search(query, args={})
196
- ActiveSupport::Deprecation.warn("solr_search is deprecated and will be removed in the next release. Use SolrService.query instead")
197
- SolrService.instance.conn.query(query, args)
198
- end
199
-
200
- # @deprecated
201
- # If query is :all, this method will query Solr for all instances
202
- # of self.type (based on active_fedora_model_s as indexed
203
- # by Solr). If the query is any other string, this method simply does
204
- # a pid based search (id:query).
205
- #
206
- # Note that this method does _not_ return ActiveFedora::Model
207
- # objects, but rather an array of SolrResults.
208
- #
209
- # Args is an options hash, which is passed into the SolrService
210
- # connection instance.
211
- def find_by_solr(query, args={})
212
- ActiveSupport::Deprecation.warn("find_by_fields_by_solr is deprecated and will be removed in 5.0. Use find_with_conditions instead.")
213
- if query == :all
214
- escaped_class_name = self.name.gsub(/(:)/, '\\:')
215
- SolrService.query("#{ActiveFedora::SolrService.solr_name(:active_fedora_model, :symbol)}:#{escaped_class_name}", args)
216
- elsif query.class == String
217
- escaped_id = query.gsub(/(:)/, '\\:')
218
- SolrService.query("#{SOLR_DOCUMENT_ID}:#{escaped_id}", args)
219
- end
220
- end
221
-
222
- # @deprecated
223
- # Find all ActiveFedora objects for this model that match arguments
224
- # passed in by querying Solr. Like find_by_solr this returns a solr result.
225
- #
226
- # @param query_fields [Hash] field names and values to filter on (query_fields must be the solr_field_name for non-MetadataDatastream derived datastreams)
227
- # @param opts [Hash] specifies options for the solr query
228
- #
229
- # options may include:
230
- #
231
- # :sort => array of hash with one hash per sort by field... defaults to [{system_create=>:descending}]
232
- # :default_field, :rows, :filter_queries, :debug_query,
233
- # :explain_other, :facets, :highlighting, :mlt,
234
- # :operator => :or / :and
235
- # :start => defaults to 0
236
- # :field_list => array, defaults to ["*", "score"]
237
- #
238
- def find_by_fields_by_solr(query_fields,opts={})
239
- ActiveSupport::Deprecation.warn("find_by_fields_by_solr is deprecated and will be removed in 5.0")
240
- #create solr_args from fields passed in, needs to be comma separated list of form field1=value1,field2=value2,...
241
- escaped_class_name = self.name.gsub(/(:)/, '\\:')
242
- query = "#{ActiveFedora::SolrService.solr_name(:active_fedora_model, :symbol)}:#{escaped_class_name}"
243
-
244
- query_fields.each_pair do |key,value|
245
- unless value.nil?
246
- solr_key = key
247
- #convert to symbol if need be
248
- key = key.to_sym if !class_fields.has_key?(key)&&class_fields.has_key?(key.to_sym)
249
- #do necessary mapping with suffix in most cases, otherwise ignore as a solr field key that activefedora does not know about
250
- if class_fields.has_key?(key) && class_fields[key].has_key?(:type)
251
- type = class_fields[key][:type]
252
- type = :string unless type.kind_of?(Symbol)
253
- solr_key = ActiveFedora::SolrService.solr_name(key,type)
254
- end
255
-
256
- escaped_value = value.gsub(/(:)/, '\\:')
257
- #escaped_value = escaped_value.gsub(/ /, '\\ ')
258
- key = SOLR_DOCUMENT_ID if (key === :id || key === :pid)
259
- query = key.to_s.eql?(SOLR_DOCUMENT_ID) ? "#{query} AND #{key}:#{escaped_value}" : "#{query} AND #{solr_key}:#{escaped_value}"
260
- end
261
- end
262
-
263
- query_opts = {}
264
- opts.each do |key,value|
265
- key = key.to_sym
266
- query_opts[key] = value
267
- end
268
-
269
- #set default sort to created date ascending
270
- unless query_opts.include?(:sort)
271
- query_opts.merge!({:sort=>[ActiveFedora::SolrService.solr_name(:system_create,:date)+' asc']})
272
- else
273
- #need to convert to solr names for all fields
274
- sort_array =[]
275
-
276
- opts[:sort].collect do |sort|
277
- sort_direction = 'ascending'
278
- if sort.respond_to?(:keys)
279
- key = sort.keys[0]
280
- sort_direction = sort[key]
281
- else
282
- key = sort.to_s
283
- end
284
- sort_direction = sort_direction =~ /^desc/ ? 'desc' : 'asc'
285
- field_name = key
286
-
287
- if key.to_s =~ /^system_create/
288
- field_name = :system_create_date
289
- key = :system_create
290
- elsif key.to_s =~ /^system_mod/
291
- field_name = :system_modified_date
292
- key = :system_modified
293
- end
294
-
295
- solr_name = field_name
296
- if class_fields.include?(field_name.to_sym)
297
- solr_name = ActiveFedora::SolrService.solr_name(key,class_fields[field_name.to_sym][:type])
298
- end
299
- sort_array.push("#{solr_name} #{sort_direction}")
300
- end
301
-
302
- query_opts[:sort] = sort_array.join(",")
303
- end
304
-
305
- logger.debug "Querying solr for #{self.name} objects with query: '#{query}'"
306
- SolrService.query(query, query_opts)
307
- end
308
-
309
170
  # Returns a solr result matching the supplied conditions
310
171
  # @param[Hash,String] conditions can either be specified as a string, or
311
172
  # hash representing the query part of an solr statement. If a hash is
@@ -326,16 +187,6 @@ module ActiveFedora
326
187
  '"' + value.gsub(/(:)/, '\\:').gsub(/(\/)/, '\\/').gsub(/"/, '\\"') + '"'
327
188
  end
328
189
 
329
- # @deprecated
330
- def class_fields
331
- #create dummy object that is empty by passing in fake pid
332
- object = self.new()#{:pid=>'FAKE'})
333
- fields = object.fields
334
- #reset id to nothing
335
- fields[:id][:values] = []
336
- return fields
337
- end
338
-
339
190
  private
340
191
 
341
192
  # Returns a solr query for the supplied conditions
@@ -66,6 +66,10 @@ module ActiveFedora
66
66
  end
67
67
  end
68
68
 
69
+ def destroy
70
+ delete
71
+ end
72
+
69
73
  # Updates Solr index with self.
70
74
  def update_index
71
75
  if defined?( Solrizer::Fedora::Solrizer )
@@ -1,5 +1,3 @@
1
- require 'rdf'
2
-
3
1
  module ActiveFedora
4
2
  class RDFDatastream < Datastream
5
3
  # this enables a cleaner API for solr integration
@@ -1,6 +1,5 @@
1
1
  require 'uri'
2
2
  require 'rdf/rdfxml'
3
- require 'rdf'
4
3
 
5
4
  module ActiveFedora
6
5
  # This class ensures that the RELS-EXT datastream is always serialized
@@ -1,7 +1,6 @@
1
1
  require 'solrizer/field_name_mapper'
2
2
  require 'uri'
3
3
  require 'rdf/rdfxml'
4
- require 'rdf'
5
4
  require 'active_fedora/rdf_xml_writer'
6
5
 
7
6
  module ActiveFedora
@@ -1,4 +1,3 @@
1
- require 'rdf'
2
1
  module ActiveFedora
3
2
  module SemanticNode
4
3
  extend ActiveSupport::Concern
@@ -1,3 +1,3 @@
1
1
  module ActiveFedora
2
- VERSION = "5.0.0.rc2"
2
+ VERSION = "5.0.0.rc3"
3
3
  end
@@ -44,9 +44,7 @@ require 'rspec/core/rake_task'
44
44
  end
45
45
 
46
46
  desc "Loads or refreshes the fixtures needed to run the tests"
47
- task :load_fixtures => :environment do
48
- # ActiveFedora.init unless Thread.current[:repo]
49
-
47
+ task :fixtures => :environment do
50
48
  ENV["pid"] = "hydrangea:fixture_mods_article1"
51
49
  Rake::Task["repo:refresh"].invoke
52
50
  ENV["pid"] = nil
@@ -67,7 +65,7 @@ task :hudson do
67
65
  ENV['environment'] = "test"
68
66
  Rake::Task["active_fedora:configure_jetty"].invoke
69
67
  jetty_params = Jettywrapper.load_config
70
- jetty_params[:startup_wait]= 30
68
+ jetty_params[:startup_wait]= 60
71
69
  error = Jettywrapper.wrap(jetty_params) do
72
70
  Rake::Task['active_fedora:coverage'].invoke
73
71
  end
@@ -82,7 +80,7 @@ task :coverage do
82
80
  ruby_engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : "ruby"
83
81
  ENV['COVERAGE'] = 'true' unless ruby_engine == 'jruby'
84
82
 
85
- Rake::Task["active_fedora:load_fixtures"].invoke
83
+ Rake::Task["active_fedora:fixtures"].invoke
86
84
  Rake::Task["active_fedora:rspec"].invoke
87
85
  end
88
86
 
@@ -175,7 +175,7 @@
175
175
  />
176
176
  <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
177
177
  <filter class="solr.LowerCaseFilterFactory"/>
178
- <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
178
+ <filter class="solr.SnowballPorterFilterFactory" language="English"/>
179
179
  <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
180
180
  </analyzer>
181
181
  <analyzer type="query">
@@ -184,7 +184,7 @@
184
184
  <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
185
185
  <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
186
186
  <filter class="solr.LowerCaseFilterFactory"/>
187
- <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
187
+ <filter class="solr.SnowballPorterFilterFactory" language="English"/>
188
188
  <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
189
189
  </analyzer>
190
190
  </fieldType>
@@ -199,7 +199,7 @@
199
199
  <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
200
200
  <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
201
201
  <filter class="solr.LowerCaseFilterFactory"/>
202
- <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
202
+ <filter class="solr.SnowballPorterFilterFactory" language="English"/>
203
203
  <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
204
204
  </analyzer>
205
205
  </fieldType>
@@ -264,7 +264,7 @@
264
264
 
265
265
  <dynamicField name="random*" type="random" />
266
266
 
267
- <dynamicField name="*_sort" type="string" indexed="true" stored="false" multiValued="true" />
267
+ <dynamicField name="*_sort" type="string" indexed="true" stored="false" multiValued="false" />
268
268
  <dynamicField name="*_facet" type="string" indexed="true" stored="true" multiValued="true" />
269
269
  <dynamicField name="*_display" type="string" indexed="false" stored="true" multiValued="true" />
270
270
 
@@ -275,4 +275,4 @@
275
275
  <solrQueryParser defaultOperator="AND" />
276
276
  <copyField source="*_facet" dest="text" />
277
277
 
278
- </schema>
278
+ </schema>
@@ -16,473 +16,223 @@
16
16
  limitations under the License.
17
17
  -->
18
18
 
19
+ <!--
20
+ For more details about configurations options that may appear in
21
+ this file, see http://wiki.apache.org/solr/SolrConfigXml.
22
+ -->
19
23
  <config>
20
- <!-- Set this to 'false' if you want solr to continue working after it has
21
- encountered an severe configuration error. In a production environment,
22
- you may want solr to keep working even if one handler is mis-configured.
24
+ <!-- In all configuration below, a prefix of "solr." for class names
25
+ is an alias that causes solr to search appropriate packages,
26
+ including org.apache.solr.(search|update|request|core|analysis)
27
+
28
+ You may also specify a fully qualified Java classname if you
29
+ have your own custom plugins.
30
+ -->
31
+
32
+ <!-- Set this to 'false' if you want solr to continue working after
33
+ it has encountered an severe configuration error. In a
34
+ production environment, you may want solr to keep working even
35
+ if one handler is mis-configured.
36
+
37
+ You may also set this to false using by setting the system
38
+ property:
23
39
 
24
- You may also set this to false using by setting the system property:
25
40
  -Dsolr.abortOnConfigurationError=false
26
- -->
41
+ -->
27
42
  <abortOnConfigurationError>${solr.abortOnConfigurationError:true}</abortOnConfigurationError>
43
+
44
+ <!-- Controls what version of Lucene various components of Solr
45
+ adhere to. Generally, you want to use the latest version to
46
+ get all bug fixes and improvements. It is highly recommended
47
+ that you fully re-index after changing this setting as it can
48
+ affect both how text is indexed and queried.
49
+ -->
50
+ <luceneMatchVersion>LUCENE_40</luceneMatchVersion>
28
51
 
29
- <!-- Used to specify an alternate directory to hold all index data
30
- other than the default ./data under the Solr home.
31
- If replication is in use, this should match the replication configuration. -->
32
- <!-- <dataDir>${solr.data.dir:./solr/data/salt}</dataDir>
33
- -->
34
-
35
- <indexDefaults>
36
- <!-- Values here affect all index writers and act as a default unless overridden. -->
37
- <useCompoundFile>false</useCompoundFile>
52
+ <!-- The DirectoryFactory to use for indexes.
53
+ solr.StandardDirectoryFactory, the default, is filesystem based.
54
+ solr.RAMDirectoryFactory is memory based, not persistent, and doesn't work with replication. -->
55
+ <directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.StandardDirectoryFactory}"/>
38
56
 
39
- <mergeFactor>10</mergeFactor>
40
- <!--
41
- If both ramBufferSizeMB and maxBufferedDocs is set, then Lucene will flush based on whichever limit is hit first.
57
+ <!-- solr lib dirs -->
58
+ <lib dir="../lib/contrib/analysis-extras/lib" />
59
+ <lib dir="../lib/contrib/analysis-extras/lucene-libs" />
60
+
61
+ <dataDir>${solr.data.dir:}</dataDir>
42
62
 
43
- -->
44
- <!--<maxBufferedDocs>1000</maxBufferedDocs>-->
45
- <!-- Tell Lucene when to flush documents to disk.
46
- Giving Lucene more memory for indexing means faster indexing at the cost of more RAM
63
+ <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" />
47
64
 
48
- If both ramBufferSizeMB and maxBufferedDocs is set, then Lucene will flush based on whichever limit is hit first.
65
+ <requestDispatcher handleSelect="true" >
66
+ <requestParsers enableRemoteStreaming="true" multipartUploadLimitInKB="2048" />
67
+ </requestDispatcher>
49
68
 
50
- -->
51
- <ramBufferSizeMB>32</ramBufferSizeMB>
52
- <maxMergeDocs>2147483647</maxMergeDocs>
53
- <maxFieldLength>10000</maxFieldLength>
54
- <writeLockTimeout>1000</writeLockTimeout>
55
- <commitLockTimeout>10000</commitLockTimeout>
56
-
57
- <!--
58
- Expert: Turn on Lucene's auto commit capability.
59
- This causes intermediate segment flushes to write a new lucene
60
- index descriptor, enabling it to be opened by an external
61
- IndexReader.
62
- NOTE: Despite the name, this value does not have any relation to Solr's autoCommit functionality
63
- -->
64
- <!--<luceneAutoCommit>false</luceneAutoCommit>-->
65
- <!--
66
- Expert:
67
- The Merge Policy in Lucene controls how merging is handled by Lucene. The default in 2.3 is the LogByteSizeMergePolicy, previous
68
- versions used LogDocMergePolicy.
69
+ <requestHandler name="/analysis/field" startup="lazy" class="solr.FieldAnalysisRequestHandler" />
70
+ <requestHandler name="/update" class="solr.UpdateRequestHandler" />
71
+ <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
72
+
73
+ <requestHandler name="/admin/ping" class="solr.PingRequestHandler">
74
+ <lst name="invariants">
75
+ <str name="q">solrpingquery</str>
76
+ </lst>
77
+ <lst name="defaults">
78
+ <str name="echoParams">all</str>
79
+ </lst>
80
+ </requestHandler>
69
81
 
70
- LogByteSizeMergePolicy chooses segments to merge based on their size. The Lucene 2.2 default, LogDocMergePolicy chose when
71
- to merge based on number of documents
82
+ <!-- config for the admin interface -->
83
+ <admin>
84
+ <defaultQuery>search</defaultQuery>
85
+ </admin>
72
86
 
73
- Other implementations of MergePolicy must have a no-argument constructor
74
- -->
75
- <!--<mergePolicy>org.apache.lucene.index.LogByteSizeMergePolicy</mergePolicy>-->
76
87
 
77
- <!--
78
- Expert:
79
- The Merge Scheduler in Lucene controls how merges are performed. The ConcurrentMergeScheduler (Lucene 2.3 default)
80
- can perform merges in the background using separate threads. The SerialMergeScheduler (Lucene 2.2 default) does not.
81
- -->
82
- <!--<mergeScheduler>org.apache.lucene.index.ConcurrentMergeScheduler</mergeScheduler>-->
88
+ <requestHandler name="search" class="solr.SearchHandler" default="true">
89
+ <!-- default values for query parameters can be specified, these
90
+ will be overridden by parameters in the request
91
+ -->
92
+ <lst name="defaults">
93
+ <str name="defType">dismax</str>
94
+ <str name="echoParams">explicit</str>
95
+ <str name="q.alt">*:*</str>
96
+ <str name="mm">2&lt;-1 5&lt;-2 6&lt;90%</str>
97
+ <!-- this qf and pf are used by default, if not otherwise specified by
98
+ client. The default blacklight_config will use these for the
99
+ "keywords" search. See the author_qf/author_pf, title_qf, etc
100
+ below, which the default blacklight_config will specify for
101
+ those searches. You may also be interested in:
102
+ http://wiki.apache.org/solr/LocalParams
103
+ -->
104
+ <str name="qf">
105
+ id
106
+ title_t^25000
107
+ text
108
+ active_fedora_model_s
109
+ object_type_facet
110
+ </str>
111
+ <str name="pf">
112
+ id
113
+ title_t^250000
114
+ text^10
115
+ active_fedora_model_s
116
+ object_type_facet
117
+ </str>
118
+
119
+ <str name="author_qf">
120
+ author_unstem_search^200
121
+ author_addl_unstem_search^50
122
+ author_t^20
123
+ author_addl_t
124
+ </str>
125
+ <str name="author_pf">
126
+ author_unstem_search^2000
127
+ author_addl_unstem_search^500
128
+ author_t^200
129
+ author_addl_t^10
130
+ </str>
131
+ <str name="title_qf">
132
+ title_unstem_search^50000
133
+ subtitle_unstem_search^25000
134
+ title_addl_unstem_search^10000
135
+ title_t^5000
136
+ subtitle_t^2500
137
+ title_addl_t^100
138
+ title_added_entry_unstem_search^50
139
+ title_added_entry_t^10
140
+ title_series_unstem_search^5
141
+ title_series_t
142
+ </str>
143
+ <str name="title_pf">
144
+ title_unstem_search^500000
145
+ subtitle_unstem_search^250000
146
+ title_addl_unstem_search^100000
147
+ title_t^50000
148
+ subtitle_t^25000
149
+ title_addl_t^1000
150
+ title_added_entry_unstem_search^500
151
+ title_added_entry_t^100
152
+ title_series_t^50
153
+ title_series_unstem_search^10
154
+ </str>
155
+ <str name="subject_qf">
156
+ subject_topic_unstem_search^200
157
+ subject_unstem_search^125
158
+ subject_topic_facet^100
159
+ subject_t^50
160
+ subject_addl_unstem_search^10
161
+ subject_addl_t
162
+ </str>
163
+ <str name="subject_pf">
164
+ subject_topic_unstem_search^2000
165
+ subject_unstem_search^1250
166
+ subject_t^1000
167
+ subject_topic_facet^500
168
+ subject_addl_unstem_search^100
169
+ subject_addl_t^10
170
+ </str>
171
+
172
+ <int name="ps">3</int>
173
+ <float name="tie">0.01</float>
174
+
175
+ <!-- NOT using marc_display because it is large and will slow things down for search results -->
176
+ <str name="fl">
177
+ *,
178
+ score,
179
+ </str>
180
+
181
+ <str name="facet">true</str>
182
+ <str name="facet.mincount">1</str>
183
+ <str name="facet.limit">10</str>
184
+ <str name="facet.field">format</str>
185
+ <str name="facet.field">lc_1letter_facet</str>
186
+ <str name="facet.field">lc_alpha_facet</str>
187
+ <str name="facet.field">lc_b4cutter_facet</str>
188
+ <str name="facet.field">language_facet</str>
189
+ <str name="facet.field">pub_date</str>
190
+ <str name="facet.field">subject_era_facet</str>
191
+ <str name="facet.field">subject_geo_facet</str>
192
+ <str name="facet.field">subject_topic_facet</str>
193
+
194
+ <str name="spellcheck">true</str>
195
+ <str name="spellcheck.dictionary">default</str>
196
+ <str name="spellcheck.onlyMorePopular">true</str>
197
+ <str name="spellcheck.extendedResults">true</str>
198
+ <str name="spellcheck.collate">false</str>
199
+ <str name="spellcheck.count">5</str>
83
200
 
84
- <!--
85
- This option specifies which Lucene LockFactory implementation to use.
201
+ </lst>
202
+ <arr name="last-components">
203
+ <str>spellcheck</str>
204
+ </arr>
86
205
 
87
- single = SingleInstanceLockFactory - suggested for a read-only index
88
- or when there is no possibility of another process trying
89
- to modify the index.
90
- native = NativeFSLockFactory
91
- simple = SimpleFSLockFactory
92
-
93
- (For backwards compatibility with Solr 1.2, 'simple' is the default
94
- if not specified.)
95
- -->
96
- <lockType>single</lockType>
97
- </indexDefaults>
98
-
99
- <mainIndex>
100
- <!-- options specific to the main on-disk lucene index -->
101
- <useCompoundFile>false</useCompoundFile>
102
- <ramBufferSizeMB>32</ramBufferSizeMB>
103
- <mergeFactor>10</mergeFactor>
104
- <!-- Deprecated -->
105
- <!--<maxBufferedDocs>1000</maxBufferedDocs>-->
106
- <maxMergeDocs>2147483647</maxMergeDocs>
107
- <maxFieldLength>10000</maxFieldLength>
108
-
109
- <!-- If true, unlock any held write or commit locks on startup.
110
- This defeats the locking mechanism that allows multiple
111
- processes to safely access a lucene index, and should be
112
- used with care.
113
- This is not needed if lock type is 'none' or 'single'
114
- -->
115
- <unlockOnStartup>false</unlockOnStartup>
116
- </mainIndex>
117
-
118
- <!-- Enables JMX if and only if an existing MBeanServer is found, use
119
- this if you want to configure JMX through JVM parameters. Remove
120
- this to disable exposing Solr configuration and statistics to JMX.
121
-
122
- If you want to connect to a particular server, specify the agentId
123
- e.g. <jmx agentId="myAgent" />
124
-
125
- If you want to start a new MBeanServer, specify the serviceUrl
126
- e.g <jmx serviceurl="service:jmx:rmi:///jndi/rmi://localhost:9999/solr" />
127
-
128
- For more details see http://wiki.apache.org/solr/SolrJmx
129
- -->
130
- <jmx />
131
-
132
- <!-- the default high-performance update handler -->
133
- <updateHandler class="solr.DirectUpdateHandler2">
134
-
135
- <!-- A prefix of "solr." for class names is an alias that
136
- causes solr to search appropriate packages, including
137
- org.apache.solr.(search|update|request|core|analysis)
138
- -->
139
-
140
- <!-- Perform a <commit/> automatically under certain conditions:
141
- maxDocs - number of updates since last commit is greater than this
142
- maxTime - oldest uncommited update (in ms) is this long ago
143
- <autoCommit>
144
- <maxDocs>10000</maxDocs>
145
- <maxTime>1000</maxTime>
146
- </autoCommit>
147
- -->
206
+ </requestHandler>
148
207
 
149
- <!-- The RunExecutableListener executes an external command.
150
- exe - the name of the executable to run
151
- dir - dir to use as the current working directory. default="."
152
- wait - the calling thread waits until the executable returns. default="true"
153
- args - the arguments to pass to the program. default=nothing
154
- env - environment variables to set. default=nothing
155
- -->
156
- <!-- A postCommit event is fired after every commit or optimize command
157
- <listener event="postCommit" class="solr.RunExecutableListener">
158
- <str name="exe">solr/bin/snapshooter</str>
159
- <str name="dir">.</str>
160
- <bool name="wait">true</bool>
161
- <arr name="args"> <str>arg1</str> <str>arg2</str> </arr>
162
- <arr name="env"> <str>MYVAR=val1</str> </arr>
163
- </listener>
164
- -->
165
- <!-- A postOptimize event is fired only after every optimize command, useful
166
- in conjunction with index distribution to only distribute optimized indicies
167
- <listener event="postOptimize" class="solr.RunExecutableListener">
168
- <str name="exe">snapshooter</str>
169
- <str name="dir">solr/bin</str>
170
- <bool name="wait">true</bool>
171
- </listener>
172
- -->
173
208
 
174
- </updateHandler>
175
-
176
-
177
- <query>
178
- <!-- Maximum number of clauses in a boolean query... can affect
179
- range or prefix queries that expand to big boolean
180
- queries. An exception is thrown if exceeded. -->
181
- <maxBooleanClauses>1024</maxBooleanClauses>
182
-
183
-
184
- <!-- Cache used by SolrIndexSearcher for filters (DocSets),
185
- unordered sets of *all* documents that match a query.
186
- When a new searcher is opened, its caches may be prepopulated
187
- or "autowarmed" using data from caches in the old searcher.
188
- autowarmCount is the number of items to prepopulate. For LRUCache,
189
- the autowarmed items will be the most recently accessed items.
190
- Parameters:
191
- class - the SolrCache implementation (currently only LRUCache)
192
- size - the maximum number of entries in the cache
193
- initialSize - the initial capacity (number of entries) of
194
- the cache. (seel java.util.HashMap)
195
- autowarmCount - the number of entries to prepopulate from
196
- and old cache.
197
- -->
198
- <filterCache
199
- class="solr.LRUCache"
200
- size="512"
201
- initialSize="512"
202
- autowarmCount="128"/>
203
-
204
- <!-- queryResultCache caches results of searches - ordered lists of
205
- document ids (DocList) based on a query, a sort, and the range
206
- of documents requested. -->
207
- <queryResultCache
208
- class="solr.LRUCache"
209
- size="512"
210
- initialSize="512"
211
- autowarmCount="32"/>
212
-
213
- <!-- documentCache caches Lucene Document objects (the stored fields for each document).
214
- Since Lucene internal document ids are transient, this cache will not be autowarmed. -->
215
- <documentCache
216
- class="solr.LRUCache"
217
- size="512"
218
- initialSize="512"
219
- autowarmCount="0"/>
220
-
221
- <!-- If true, stored fields that are not requested will be loaded lazily.
222
-
223
- This can result in a significant speed improvement if the usual case is to
224
- not load all stored fields, especially if the skipped fields are large compressed
225
- text fields.
226
- -->
227
- <enableLazyFieldLoading>true</enableLazyFieldLoading>
228
-
229
- <!-- Example of a generic cache. These caches may be accessed by name
230
- through SolrIndexSearcher.getCache(),cacheLookup(), and cacheInsert().
231
- The purpose is to enable easy caching of user/application level data.
232
- The regenerator argument should be specified as an implementation
233
- of solr.search.CacheRegenerator if autowarming is desired. -->
234
- <!--
235
- <cache name="myUserCache"
236
- class="solr.LRUCache"
237
- size="4096"
238
- initialSize="1024"
239
- autowarmCount="1024"
240
- regenerator="org.mycompany.mypackage.MyRegenerator"
241
- />
242
- -->
209
+ <!-- Hydra Additions Start -->
243
210
 
244
- <!-- An optimization that attempts to use a filter to satisfy a search.
245
- If the requested sort does not include score, then the filterCache
246
- will be checked for a filter matching the query. If found, the filter
247
- will be used as the source of document ids, and then the sort will be
248
- applied to that.
249
- <useFilterForSortedQuery>true</useFilterForSortedQuery>
250
- -->
251
-
252
- <!-- An optimization for use with the queryResultCache. When a search
253
- is requested, a superset of the requested number of document ids
254
- are collected. For example, if a search for a particular query
255
- requests matching documents 10 through 19, and queryWindowSize is 50,
256
- then documents 0 through 49 will be collected and cached. Any further
257
- requests in that range can be satisfied via the cache. -->
258
- <queryResultWindowSize>50</queryResultWindowSize>
259
-
260
- <!-- Maximum number of documents to cache for any entry in the
261
- queryResultCache. -->
262
- <queryResultMaxDocsCached>200</queryResultMaxDocsCached>
263
-
264
- <!-- This entry enables an int hash representation for filters (DocSets)
265
- when the number of items in the set is less than maxSize. For smaller
266
- sets, this representation is more memory efficient, more efficient to
267
- iterate over, and faster to take intersections. -->
268
- <HashDocSet maxSize="3000" loadFactor="0.75"/>
269
-
270
- <!-- a newSearcher event is fired whenever a new searcher is being prepared
271
- and there is a current searcher handling requests (aka registered). -->
272
- <!-- QuerySenderListener takes an array of NamedList and executes a
273
- local query request for each NamedList in sequence. -->
274
- <listener event="newSearcher" class="solr.QuerySenderListener">
275
- <arr name="queries">
276
- <lst> <str name="q">solr</str> <str name="start">0</str> <str name="rows">10</str> </lst>
277
- <lst> <str name="q">rocks</str> <str name="start">0</str> <str name="rows">10</str> </lst>
278
- <lst><str name="q">static newSearcher warming query from solrconfig.xml</str></lst>
279
- </arr>
280
- </listener>
281
-
282
- <!-- a firstSearcher event is fired whenever a new searcher is being
283
- prepared but there is no current registered searcher to handle
284
- requests or to gain autowarming data from. -->
285
- <listener event="firstSearcher" class="solr.QuerySenderListener">
286
- <arr name="queries">
287
- <lst> <str name="q">fast_warm</str> <str name="start">0</str> <str name="rows">10</str> </lst>
288
- <lst><str name="q">static firstSearcher warming query from solrconfig.xml</str></lst>
289
- </arr>
290
- </listener>
291
-
292
- <!-- If a search request comes in and there is no current registered searcher,
293
- then immediately register the still warming searcher and use it. If
294
- "false" then all requests will block until the first searcher is done
295
- warming. -->
296
- <useColdSearcher>false</useColdSearcher>
297
-
298
- <!-- Maximum number of searchers that may be warming in the background
299
- concurrently. An error is returned if this limit is exceeded. Recommend
300
- 1-2 for read-only slaves, higher for masters w/o cache warming. -->
301
- <maxWarmingSearchers>2</maxWarmingSearchers>
302
-
303
- </query>
304
-
305
- <!--
306
- Let the dispatch filter handler /select?qt=XXX
307
- handleSelect=true will use consistent error handling for /select and /update
308
- handleSelect=false will use solr1.1 style error formatting
309
- -->
310
- <requestDispatcher handleSelect="true" >
311
- <!--Make sure your system has some authentication before enabling remote streaming! -->
312
- <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048" />
313
-
314
- <!-- Set HTTP caching related parameters (for proxy caches and clients).
315
-
316
- To get the behaviour of Solr 1.2 (ie: no caching related headers)
317
- use the never304="true" option and do not specify a value for
318
- <cacheControl>
319
- -->
320
- <!-- <httpCaching never304="true"> -->
321
- <httpCaching lastModifiedFrom="openTime"
322
- etagSeed="Solr">
323
- <!-- lastModFrom="openTime" is the default, the Last-Modified value
324
- (and validation against If-Modified-Since requests) will all be
325
- relative to when the current Searcher was opened.
326
- You can change it to lastModFrom="dirLastMod" if you want the
327
- value to exactly corrispond to when the physical index was last
328
- modified.
329
-
330
- etagSeed="..." is an option you can change to force the ETag
331
- header (and validation against If-None-Match requests) to be
332
- differnet even if the index has not changed (ie: when making
333
- significant changes to your config file)
334
-
335
- lastModifiedFrom and etagSeed are both ignored if you use the
336
- never304="true" option.
337
- -->
338
- <!-- If you include a <cacheControl> directive, it will be used to
339
- generate a Cache-Control header, as well as an Expires header
340
- if the value contains "max-age="
341
-
342
- By default, no Cache-Control header is generated.
343
-
344
- You can use the <cacheControl> option even if you have set
345
- never304="true"
346
- -->
347
- <!-- <cacheControl>max-age=30, public</cacheControl> -->
348
- </httpCaching>
349
- </requestDispatcher>
350
-
351
-
352
- <!-- requestHandler plugins... incoming queries will be dispatched to the
353
- correct handler based on the path or the qt (query type) param.
354
- Names starting with a '/' are accessed with the a path equal to the
355
- registered name. Names without a leading '/' are accessed with:
356
- http://host/app/select?qt=name
357
- If no qt is defined, the requestHandler that declares default="true"
358
- will be used.
359
- -->
360
- <requestHandler name="standard" class="solr.SearchHandler" default="true">
361
- <!-- default values for query parameters -->
211
+ <requestHandler name="standard" class="solr.SearchHandler">
362
212
  <lst name="defaults">
363
213
  <str name="echoParams">explicit</str>
364
- <!--
365
- <int name="rows">10</int>
366
- <str name="fl">*</str>
367
- <str name="version">2.1</str>
368
- -->
369
214
  </lst>
370
215
  </requestHandler>
371
216
 
372
-
373
- <requestHandler name="search" class="solr.SearchHandler" >
217
+ <requestHandler name="permissions" class="solr.SearchHandler" >
374
218
  <lst name="defaults">
375
- <!-- Making defType lucene to exclude file assets -->
376
- <str name="defType">lucene</str>
377
- <str name="df">has_model_s</str>
378
- <str name="q.op">AND</str>
379
- <str name="facet">on</str>
380
- <str name="facet.mincount">1</str>
381
- <str name="echoParams">explicit</str>
382
- <float name="tie">0.01</float>
383
- <str name="qf_dismax">id^0.8 id_t^0.8 title_t^0.3 mods_t^0.2</str>
384
- <str name="pf_dismax">id^0.9 id_t^0.9 title_t^0.5 mods_t^0.2</str>
385
- <str name="fl">
386
- id,title_t,date_t,year_facet,month_facet,has_model_s,has_collection_member_s,system_create_dt,
387
- person_0_role_t,person_1_role_t,person_2_role_t,person_3_role_t,person_4_role_t,person_5_role_t,person_6_role_t,
388
- person_7_role_t,person_8_role_t,person_9_role_t,
389
- person_0_first_name_t,person_1_first_name_t,person_2_first_name_t,person_3_first_name_t,person_4_first_name_t,
390
- person_5_first_name_t,person_6_first_name_t,person_7_first_name_t,person_8_first_name_t,person_9_first_name_t,
391
- person_0_last_name_t,person_1_last_name_t,person_2_last_name_t,person_3_last_name_t,person_4_last_name_t,
392
- person_5_last_name_t,person_6_last_name_t,person_7_last_name_t,person_8_last_name_t,person_9_last_name_t,
393
- status_t,subject_t,depositor_t,
394
- journal_title_info_t,journal_issue_publication_date_t,
395
- journal_issue_pages_end_t,journal_issue_volume_t,journal_title_info_main_title_t,journal_issue_pages_start_t,
396
- journal_issue_start_page_t, journal_issue_end_page_t, abstract_t,
397
- person_0_institution_t,person_1_institution_t,person_2_institution_t,person_3_institution_t,person_4_institution_t,person_5_institution_t,person_institution_role_t,
398
- person_7_institution_t,person_8_institution_t,person_9_institution_t,
399
- mods_gps_t, mods_region_t, mods_site_t, mods_ecosystem_t,
400
- mods_timespan_start_t, mods_timespan_end_t, description_t, mods_title_info_main_title_t, mods_0_title_info_0_main_title_t, embargo_release_date_dt, note_t,
401
- object_type_facet, department_facet, peer_reviewed_facet
402
- </str>
403
- <str name="mm">
404
- 2&lt;-1 5&lt;-2 6&lt;90%
405
- </str>
406
- <int name="ps">100</int>
407
- <str name="q.alt">*:*</str>
408
- <!-- example highlighter config, enable per-query with hl=true -->
409
- <str name="hl.fl">text features name</str>
410
- <!-- for this field, we want no fragmenting, just highlighting -->
411
- <str name="f.name.hl.fragsize">0</str>
412
- <!-- instructs Solr to return the field itself if no query terms are found -->
413
- <str name="f.name.hl.alternateField">name</str>
414
- <str name="f.text.hl.fragmenter">regex</str> <!-- defined below -->
415
- </lst>
416
- </requestHandler>
417
-
418
- <requestHandler name="public_search" class="solr.SearchHandler" >
419
- <lst name="defaults">
420
- <!-- Making defType lucene to exclude file assets -->
421
- <str name="defType">lucene</str>
422
- <str name="df">has_model_s</str>
423
- <str name="q.op">AND</str>
424
- <str name="facet">on</str>
425
- <str name="facet.mincount">1</str>
426
- <str name="echoParams">explicit</str>
427
- <float name="tie">0.01</float>
428
- <str name="qf_dismax">id^0.8 id_t^0.8 format text^0.3</str>
429
- <str name="pf_dismax">id^0.9 id_t^0.9 text^0.5</str>
219
+ <str name="facet">off</str>
220
+ <str name="echoParams">all</str>
221
+ <str name="rows">1</str>
222
+ <str name="q">{!raw f=id v=$id}</str> <!-- use id=666 instead of q=id:666 -->
430
223
  <str name="fl">
431
- id,text,title_t,date_t,year_facet,month_facet,medium_t,series_facet,box_facet,folder_facet,has_model_s,has_collection_member_s,system_create_dt,
432
- person_0_role_t,person_1_role_t,person_2_role_t,person_3_role_t,person_4_role_t,person_5_role_t,person_6_role_t,person_7_role_t,person_8_role_t,person_9_role_t,
433
- person_0_first_name_t,person_1_first_name_t,person_2_first_name_t,person_3_first_name_t,person_4_first_name_t,person_5_first_name_t,person_6_first_name_t,person_7_first_name_t,person_8_first_name_t,person_9_first_name_t,
434
- person_0_last_name_t,person_1_last_name_t,person_2_last_name_t,person_3_last_name_t,person_4_last_name_t,person_5_last_name_t,person_6_last_name_t,person_7_last_name_t,person_8_last_name_t,person_9_last_name_t,depositor_t,
435
-
436
- journal_title_info_t, journal_title_info_main_title_t, journal_issue_publication_date_t, journal_issue_pages_start_t, journal_issue_pages_end_t, journal_issue_volume_t, journal_issue_start_page_t, journal_issue_end_page_t, abstract_t,
437
- person_0_institution_t,person_1_institution_t,person_2_institution_t,person_3_institution_t,person_4_institution_t,person_5_institution_t,person_institution_role_t,
438
- person_7_institution_t,person_8_institution_t,person_9_institution_t,
439
- mods_gps_t, mods_region_t, mods_site_t, mods_ecosystem_t,
440
- mods_timespan_start_t, mods_timespan_end_t, description_t, mods_title_info_t,mods_0_title_info_0_main_title_t, embargo_release_date_dt, note_t,
441
- object_type_facet, department_facet, peer_reviewed_facet
224
+ id,access_t,
225
+ discover_access_group_t,discover_access_person_t,
226
+ read_access_group_t,read_access_person_t,
227
+ edit_access_group_t,edit_access_person_t,
228
+ depositor_t,
229
+ embargo_release_date_dt
442
230
  </str>
443
- <str name="mm">
444
- 2&lt;-1 5&lt;-2 6&lt;90%
445
- </str>
446
- <int name="ps">100</int>
447
- <str name="q.alt">*:*</str>
448
- <!-- example highlighter config, enable per-query with hl=true -->
449
- <str name="hl.fl">text features name</str>
450
- <!-- for this field, we want no fragmenting, just highlighting -->
451
- <str name="f.name.hl.fragsize">0</str>
452
- <!-- instructs Solr to return the field itself if no query terms are found -->
453
- <str name="f.name.hl.alternateField">name</str>
454
- <str name="f.text.hl.fragmenter">regex</str> <!-- defined below -->
455
- </lst>
456
- </requestHandler>
457
-
458
- <requestHandler name="fulltext" class="solr.SearchHandler" >
459
- <lst name="defaults">
460
- <str name="defType">dismax</str>
461
- <str name="facet">on</str>
462
- <str name="facet.mincount">1</str>
463
- <str name="echoParams">explicit</str>
464
- <float name="tie">0.01</float>
465
- <str name="qf">id^0.8 id_t^0.8 format text^0.3</str>
466
- <str name="pf">id^0.9 id_t^0.9 text^0.5</str>
467
- <str name="fl">
468
- id,text,title_t,date_t,year_facet,month_facet,medium_t,series_facet,box_facet,folder_facet
469
- </str>
470
- <str name="mm">
471
- 2&lt;-1 5&lt;-2 6&lt;90%
472
- </str>
473
- <int name="ps">100</int>
474
- <str name="q.alt">*:*</str>
475
- <!-- example highlighter config, enable per-query with hl=true -->
476
- <str name="hl.fl">text features name</str>
477
- <!-- for this field, we want no fragmenting, just highlighting -->
478
- <str name="f.name.hl.fragsize">0</str>
479
- <!-- instructs Solr to return the field itself if no query terms are
480
- found -->
481
- <str name="f.name.hl.alternateField">name</str>
482
- <str name="f.text.hl.fragmenter">regex</str> <!-- defined below -->
483
231
  </lst>
484
232
  </requestHandler>
485
-
233
+
234
+ <!-- Hydra Additions End -->
235
+
486
236
  <!-- for requests to get a single document; use id=666 instead of q=id:666 -->
487
237
  <requestHandler name="document" class="solr.SearchHandler" >
488
238
  <lst name="defaults">
@@ -490,351 +240,55 @@ journal_title_info_t, journal_title_info_main_title_t, journal_issue_publication
490
240
  <str name="fl">*</str>
491
241
  <str name="rows">1</str>
492
242
  <str name="q">{!raw f=id v=$id}</str> <!-- use id=666 instead of q=id:666 -->
493
-
494
- <str name="facet">on</str>
495
- <str name="facet.mincount">1</str>
496
-
497
- <str name="facet.field">collection_facet</str>
498
- <str name="facet.field">technology_facet</str>
499
- <str name="facet.field">person_facet</str>
500
- <!-- <str name="facet.field">title_t</str> -->
501
- <str name="facet.field">city_facet</str>
502
- <str name="facet.field">organization_facet</str>
503
- <str name="facet.field">company_facet</str>
504
- <str name="facet.field">year_facet</str>
505
- <str name="facet.field">state_facet</str>
506
- <str name="facet.field">series_facet</str>
507
- <str name="facet.field">box_facet</str>
508
- <str name="facet.field">folder_facet</str>
509
- <str name="facet.field">donor_tags_facet</str>
510
- <str name="facet.field">archivist_tags_facet</str>
511
-
512
- </lst>
513
- </requestHandler>
514
-
515
- <!-- DisMaxRequestHandler allows easy searching across multiple fields
516
- for simple user-entered phrases. It's implementation is now
517
- just the standard SearchHandler with a default query type
518
- of "dismax".
519
- see http://wiki.apache.org/solr/DisMaxRequestHandler
520
- -->
521
- <requestHandler name="dismax" class="solr.SearchHandler" >
522
- <lst name="defaults">
523
- <str name="facet">on</str>
524
- <str name="facet.mincount">1</str>
525
- <str name="echoParams">explicit</str>
526
- <float name="tie">0.01</float>
527
- <str name="qf">
528
- text^0.5
529
- </str>
530
- <str name="pf">
531
- text^0.2
532
- </str>
533
- <str name="bf">
534
- ord(popularity)^0.5 recip(rord(price),1,1000,1000)^0.3
535
- </str>
536
- <str name="fl">
537
- id,text,title_facet,date_t,medium_t,location_t
538
- </str>
539
- <str name="mm">
540
- 2&lt;-1 5&lt;-2 6&lt;90%
541
- </str>
542
- <int name="ps">100</int>
543
- <str name="q">*:*</str>
544
- <str name="q.alt">*:*</str>
545
- <!-- example highlighter config, enable per-query with hl=true -->
546
- <str name="hl.fl">text features name</str>
547
- <!-- for this field, we want no fragmenting, just highlighting -->
548
- <str name="f.name.hl.fragsize">0</str>
549
- <!-- instructs Solr to return the field itself if no query terms are
550
- found -->
551
- <str name="f.name.hl.alternateField">name</str>
552
- <str name="f.text.hl.fragmenter">regex</str> <!-- defined below -->
553
243
  </lst>
554
244
  </requestHandler>
555
245
 
556
- <!-- Note how you can register the same handler multiple times with
557
- different names (and different init parameters)
558
- -->
559
- <requestHandler name="partitioned" class="solr.SearchHandler" >
560
- <lst name="defaults">
561
- <str name="defType">dismax</str>
562
- <str name="echoParams">explicit</str>
563
- <str name="qf">text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0</str>
564
- <str name="mm">2&lt;-1 5&lt;-2 6&lt;90%</str>
565
- <!-- This is an example of using Date Math to specify a constantly
566
- moving date range in a config...
567
- -->
568
- <str name="bq">incubationdate_dt:[* TO NOW/DAY-1MONTH]^2.2</str>
569
- </lst>
570
- <!-- In addition to defaults, "appends" params can be specified
571
- to identify values which should be appended to the list of
572
- multi-val params from the query (or the existing "defaults").
573
-
574
- In this example, the param "fq=instock:true" will be appended to
575
- any query time fq params the user may specify, as a mechanism for
576
- partitioning the index, independent of any user selected filtering
577
- that may also be desired (perhaps as a result of faceted searching).
578
-
579
- NOTE: there is *absolutely* nothing a client can do to prevent these
580
- "appends" values from being used, so don't use this mechanism
581
- unless you are sure you always want it.
582
- -->
583
- <lst name="appends">
584
- <str name="fq">inStock:true</str>
585
- </lst>
586
- <!-- "invariants" are a way of letting the Solr maintainer lock down
587
- the options available to Solr clients. Any params values
588
- specified here are used regardless of what values may be specified
589
- in either the query, the "defaults", or the "appends" params.
590
-
591
- In this example, the facet.field and facet.query params are fixed,
592
- limiting the facets clients can use. Faceting is not turned on by
593
- default - but if the client does specify facet=true in the request,
594
- these are the only facets they will be able to see counts for;
595
- regardless of what other facet.field or facet.query params they
596
- may specify.
597
-
598
- NOTE: there is *absolutely* nothing a client can do to prevent these
599
- "invariants" values from being used, so don't use this mechanism
600
- unless you are sure you always want it.
601
- -->
602
- <lst name="invariants">
603
- <str name="facet.field">cat</str>
604
- <str name="facet.field">manu_exact</str>
605
- <str name="facet.query">price:[* TO 500]</str>
606
- <str name="facet.query">price:[500 TO *]</str>
607
- </lst>
608
- </requestHandler>
609
-
610
246
 
611
- <!--
612
- Search components are registered to SolrCore and used by Search Handlers
613
-
614
- By default, the following components are avaliable:
615
-
616
- <searchComponent name="query" class="org.apache.solr.handler.component.QueryComponent" />
617
- <searchComponent name="facet" class="org.apache.solr.handler.component.FacetComponent" />
618
- <searchComponent name="mlt" class="org.apache.solr.handler.component.MoreLikeThisComponent" />
619
- <searchComponent name="highlight" class="org.apache.solr.handler.component.HighlightComponent" />
620
- <searchComponent name="debug" class="org.apache.solr.handler.component.DebugComponent" />
621
-
622
- Default configuration in a requestHandler would look like:
623
- <arr name="components">
624
- <str>query</str>
625
- <str>facet</str>
626
- <str>mlt</str>
627
- <str>highlight</str>
628
- <str>debug</str>
629
- </arr>
630
247
 
631
- If you register a searchComponent to one of the standard names, that will be used instead.
632
- To insert handlers before or after the 'standard' components, use:
633
-
634
- <arr name="first-components">
635
- <str>myFirstComponentName</str>
636
- </arr>
637
-
638
- <arr name="last-components">
639
- <str>myLastComponentName</str>
640
- </arr>
641
- -->
248
+ <!-- Spell Check
249
+
250
+ The spell check component can return a list of alternative spelling
251
+ suggestions.
642
252
 
643
- <!-- The spell check component can return a list of alternative spelling
644
- suggestions. -->
253
+ http://wiki.apache.org/solr/SpellCheckComponent
254
+ -->
645
255
  <searchComponent name="spellcheck" class="solr.SpellCheckComponent">
646
256
 
647
257
  <str name="queryAnalyzerFieldType">textSpell</str>
648
258
 
259
+ <!-- Multiple "Spell Checkers" can be declared and used by this
260
+ component
261
+ -->
262
+
263
+ <!-- a spellchecker built from a field of the main index, and
264
+ written to disk
265
+ -->
649
266
  <lst name="spellchecker">
650
267
  <str name="name">default</str>
651
268
  <str name="field">spell</str>
652
- <str name="spellcheckIndexDir">./spellchecker1</str>
653
-
269
+ <str name="spellcheckIndexDir">./spell</str>
270
+ <str name="buildOnOptimize">true</str>
654
271
  </lst>
655
272
  <lst name="spellchecker">
656
- <str name="name">jarowinkler</str>
657
- <str name="field">spell</str>
658
- <!-- Use a different Distance Measure -->
659
- <str name="distanceMeasure">org.apache.lucene.search.spell.JaroWinklerDistance</str>
660
- <str name="spellcheckIndexDir">./spellchecker2</str>
661
-
273
+ <str name="name">author</str>
274
+ <str name="field">author_spell</str>
275
+ <str name="spellcheckIndexDir">./spell_author</str>
276
+ <str name="accuracy">0.7</str>
277
+ <str name="buildOnOptimize">true</str>
662
278
  </lst>
663
-
664
279
  <lst name="spellchecker">
665
- <str name="classname">solr.FileBasedSpellChecker</str>
666
- <str name="name">file</str>
667
- <str name="sourceLocation">spellings.txt</str>
668
- <str name="characterEncoding">UTF-8</str>
669
- <str name="spellcheckIndexDir">./spellcheckerFile</str>
280
+ <str name="name">subject</str>
281
+ <str name="field">subject_spell</str>
282
+ <str name="spellcheckIndexDir">./spell_subject</str>
283
+ <str name="accuracy">0.7</str>
284
+ <str name="buildOnOptimize">true</str>
670
285
  </lst>
671
- </searchComponent>
672
-
673
- <!-- a request handler utilizing the spellcheck component -->
674
- <requestHandler name="/spellCheckCompRH" class="solr.SearchHandler">
675
- <lst name="defaults">
676
- <!-- omp = Only More Popular -->
677
- <str name="spellcheck.onlyMorePopular">false</str>
678
- <!-- exr = Extended Results -->
679
- <str name="spellcheck.extendedResults">false</str>
680
- <!-- The number of suggestions to return -->
681
- <str name="spellcheck.count">1</str>
286
+ <lst name="spellchecker">
287
+ <str name="name">title</str>
288
+ <str name="field">title_spell</str>
289
+ <str name="spellcheckIndexDir">./spell_title</str>
290
+ <str name="accuracy">0.7</str>
291
+ <str name="buildOnOptimize">true</str>
682
292
  </lst>
683
- <arr name="last-components">
684
- <str>spellcheck</str>
685
- </arr>
686
- </requestHandler>
687
-
688
- <!-- a search component that enables you to configure the top results for
689
- a given query regardless of the normal lucene scoring.-->
690
- <searchComponent name="elevator" class="solr.QueryElevationComponent" >
691
- <!-- pick a fieldType to analyze queries -->
692
- <str name="queryFieldType">string</str>
693
- <str name="config-file">elevate.xml</str>
694
293
  </searchComponent>
695
-
696
- <!-- a request handler utilizing the elevator component -->
697
- <requestHandler name="/elevate" class="solr.SearchHandler" startup="lazy">
698
- <lst name="defaults">
699
- <str name="echoParams">explicit</str>
700
- </lst>
701
- <arr name="last-components">
702
- <str>elevator</str>
703
- </arr>
704
- </requestHandler>
705
-
706
-
707
- <!-- Update request handler.
708
-
709
- Note: Since solr1.1 requestHandlers requires a valid content type header if posted in
710
- the body. For example, curl now requires: -H 'Content-type:text/xml; charset=utf-8'
711
- The response format differs from solr1.1 formatting and returns a standard error code.
712
-
713
- To enable solr1.1 behavior, remove the /update handler or change its path
714
- -->
715
- <requestHandler name="/update" class="solr.XmlUpdateRequestHandler" />
716
-
717
- <!--
718
- Analysis request handler. Since Solr 1.3. Use to returnhow a document is analyzed. Useful
719
- for debugging and as a token server for other types of applications
720
- -->
721
- <requestHandler name="/analysis" class="solr.AnalysisRequestHandler" />
722
-
723
-
724
- <!-- CSV update handler, loaded on demand -->
725
- <requestHandler name="/update/csv" class="solr.CSVRequestHandler" startup="lazy" />
726
-
727
-
728
- <!--
729
- Admin Handlers - This will register all the standard admin RequestHandlers. Adding
730
- this single handler is equivolent to registering:
731
-
732
- <requestHandler name="/admin/luke" class="org.apache.solr.handler.admin.LukeRequestHandler" />
733
- <requestHandler name="/admin/system" class="org.apache.solr.handler.admin.SystemInfoHandler" />
734
- <requestHandler name="/admin/plugins" class="org.apache.solr.handler.admin.PluginInfoHandler" />
735
- <requestHandler name="/admin/threads" class="org.apache.solr.handler.admin.ThreadDumpHandler" />
736
- <requestHandler name="/admin/properties" class="org.apache.solr.handler.admin.PropertiesRequestHandler" />
737
- <requestHandler name="/admin/file" class="org.apache.solr.handler.admin.ShowFileRequestHandler" >
738
-
739
- If you wish to hide files under ${solr.home}/conf, explicitly register the ShowFileRequestHandler using:
740
- <requestHandler name="/admin/file" class="org.apache.solr.handler.admin.ShowFileRequestHandler" >
741
- <lst name="invariants">
742
- <str name="hidden">synonyms.txt</str>
743
- <str name="hidden">anotherfile.txt</str>
744
- </lst>
745
- </requestHandler>
746
- -->
747
- <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
748
-
749
- <!-- ping/healthcheck -->
750
- <requestHandler name="/admin/ping" class="PingRequestHandler">
751
- <lst name="defaults">
752
- <str name="qt">standard</str>
753
- <str name="q">solrpingquery</str>
754
- <str name="echoParams">all</str>
755
- </lst>
756
- </requestHandler>
757
-
758
- <!-- Echo the request contents back to the client -->
759
- <requestHandler name="/debug/dump" class="solr.DumpRequestHandler" >
760
- <lst name="defaults">
761
- <str name="echoParams">explicit</str> <!-- for all params (including the default etc) use: 'all' -->
762
- <str name="echoHandler">true</str>
763
- </lst>
764
- </requestHandler>
765
-
766
- <highlighting>
767
- <!-- Configure the standard fragmenter -->
768
- <!-- This could most likely be commented out in the "default" case -->
769
- <fragmenter name="gap" class="org.apache.solr.highlight.GapFragmenter" default="true">
770
- <lst name="defaults">
771
- <int name="hl.fragsize">100</int>
772
- </lst>
773
- </fragmenter>
774
-
775
- <!-- A regular-expression-based fragmenter (f.i., for sentence extraction) -->
776
- <fragmenter name="regex" class="org.apache.solr.highlight.RegexFragmenter">
777
- <lst name="defaults">
778
- <!-- slightly smaller fragsizes work better because of slop -->
779
- <int name="hl.fragsize">70</int>
780
- <!-- allow 50% slop on fragment sizes -->
781
- <float name="hl.regex.slop">0.5</float>
782
- <!-- a basic sentence pattern -->
783
- <str name="hl.regex.pattern">[-\w ,/\n\"']{20,200}</str>
784
- </lst>
785
- </fragmenter>
786
-
787
- <!-- Configure the standard formatter -->
788
- <formatter name="html" class="org.apache.solr.highlight.HtmlFormatter" default="true">
789
- <lst name="defaults">
790
- <str name="hl.simple.pre"><![CDATA[<em>]]></str>
791
- <str name="hl.simple.post"><![CDATA[</em>]]></str>
792
- </lst>
793
- </formatter>
794
- </highlighting>
795
-
796
-
797
- <!-- queryResponseWriter plugins... query responses will be written using the
798
- writer specified by the 'wt' request parameter matching the name of a registered
799
- writer.
800
- The "default" writer is the default and will be used if 'wt' is not specified
801
- in the request. XMLResponseWriter will be used if nothing is specified here.
802
- The json, python, and ruby writers are also available by default.
803
-
804
- <queryResponseWriter name="xml" class="org.apache.solr.request.XMLResponseWriter" default="true"/>
805
- <queryResponseWriter name="json" class="org.apache.solr.request.JSONResponseWriter"/>
806
- <queryResponseWriter name="python" class="org.apache.solr.request.PythonResponseWriter"/>
807
- <queryResponseWriter name="ruby" class="org.apache.solr.request.RubyResponseWriter"/>
808
- <queryResponseWriter name="php" class="org.apache.solr.request.PHPResponseWriter"/>
809
- <queryResponseWriter name="phps" class="org.apache.solr.request.PHPSerializedResponseWriter"/>
810
-
811
- <queryResponseWriter name="custom" class="com.example.MyResponseWriter"/>
812
- -->
813
-
814
- <!-- XSLT response writer transforms the XML output by any xslt file found
815
- in Solr's conf/xslt directory. Changes to xslt files are checked for
816
- every xsltCacheLifetimeSeconds.
817
- -->
818
- <queryResponseWriter name="xslt" class="org.apache.solr.request.XSLTResponseWriter">
819
- <int name="xsltCacheLifetimeSeconds">5</int>
820
- </queryResponseWriter>
821
-
822
-
823
- <!-- example of registering a query parser
824
- <queryParser name="lucene" class="org.apache.solr.search.LuceneQParserPlugin"/>
825
- -->
826
-
827
- <!-- example of registering a custom function parser
828
- <valueSourceParser name="myfunc" class="com.mycompany.MyValueSourceParser" />
829
- -->
830
-
831
- <!-- config for the admin interface -->
832
- <admin>
833
- <defaultQuery>solr</defaultQuery>
834
-
835
- <!-- configure a healthcheck file for servers behind a loadbalancer
836
- <healthcheck type="file">server-enabled</healthcheck>
837
- -->
838
- </admin>
839
-
840
294
  </config>