blob: afa56c2c9ecfa2a9bf254e13f729a6b571d16433 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version
2.0 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0 Unless required by
applicable law or agreed to in writing, software distributed under
the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and
limitations under the License.
-->
<!--
For more details about configurations options that may appear in
this file, see http://wiki.apache.org/solr/SolrConfigXml.
Specifically, the Solr Config can support XInclude, which may make
it easier to manage the configuration. See
https://issues.apache.org/jira/browse/SOLR-1167
-->
<config xmlns:xi="http://www.w3.org/2001/XInclude">
<!--
Set this to 'false' if you want solr to continue working after it
has encountered an severe configuration error. In a production
environment, you may want solr to keep working even if one handler
is mis-configured. You may also set this to false using by setting
the system property: -Dsolr.abortOnConfigurationError=false
-->
<abortOnConfigurationError>${solr.abortOnConfigurationError:true}</abortOnConfigurationError>
<!--
lib directives can be used to instruct Solr to load an Jars
identified and use them to resolve any "plugins" specified in your
solrconfig.xml or schema.xml (ie: Analyzers, Request Handlers,
etc...). All directories and paths are resolved relative the
instanceDir. If a "./lib" directory exists in your instanceDir, all
files found in it are included as if you had used the following
syntax... <lib dir="./lib" />
-->
<!--
A dir option by itself adds any files found in the directory to the
classpath, this is useful for including all jars in a directory.
-->
<lib dir="../../contrib/extraction/lib"/>
<!--
When a regex is specified in addition to a directory, only the files
in that directory which completely match the regex (anchored on both
ends) will be included.
-->
<lib dir="../../dist/" regex="apache-solr-cell-\d.*\.jar"/>
<lib dir="../../dist/" regex="apache-solr-clustering-\d.*\.jar"/>
<!--
If a dir option (with or without a regex) is used and nothing is
found that matches, it will be ignored
-->
<lib dir="../../contrib/clustering/lib/downloads/"/>
<lib dir="../../contrib/clustering/lib/"/>
<lib dir="/total/crap/dir/ignored"/>
<!--
an exact path can be used to specify a specific file. This will
cause a serious error to be logged if it can't be loaded. <lib
path="../a-jar-that-does-not-exist.jar" />
-->
<luceneMatchVersion>LUCENE_35</luceneMatchVersion>
<!--
Used to specify an alternate directory to hold all index data other
than the default ./data under the Solr home. If replication is in
use, this should match the replication configuration.
-->
<dataDir>${solr.data.dir:./solr/data}</dataDir>
<!--
WARNING: this <indexDefaults> section only provides defaults for
index writers in general. See also the <mainIndex> section after
that when changing parameters for Solr's main Lucene index.
-->
<indexDefaults>
<!--
Values here affect all index writers and act as a default unless
overridden.
-->
<useCompoundFile>false</useCompoundFile>
<mergeFactor>10</mergeFactor>
<!--
If both ramBufferSizeMB and maxBufferedDocs is set, then Lucene
will flush based on whichever limit is hit first.
-->
<!--<maxBufferedDocs>1000</maxBufferedDocs>-->
<!--
Sets the amount of RAM that may be used by Lucene indexing for
buffering added documents and deletions before they are flushed to
the Directory.
-->
<ramBufferSizeMB>32</ramBufferSizeMB>
<!-- <maxMergeDocs>2147483647</maxMergeDocs> -->
<maxFieldLength>10000</maxFieldLength>
<writeLockTimeout>1000</writeLockTimeout>
<commitLockTimeout>10000</commitLockTimeout>
<!--
Expert: Turn on Lucene's auto commit capability. This causes
intermediate segment flushes to write a new lucene index
descriptor, enabling it to be opened by an external IndexReader.
This can greatly slow down indexing speed. NOTE: Despite the name,
this value does not have any relation to Solr's autoCommit
functionality
-->
<!--<luceneAutoCommit>false</luceneAutoCommit>-->
<!--
Expert: The Merge Policy in Lucene controls how merging is handled
by Lucene. The default in 2.3 is the LogByteSizeMergePolicy,
previous versions used LogDocMergePolicy. LogByteSizeMergePolicy
chooses segments to merge based on their size. The Lucene 2.2
default, LogDocMergePolicy chose when to merge based on number of
documents Other implementations of MergePolicy must have a
no-argument constructor
-->
<!--
<mergePolicy
class="org.apache.lucene.index.LogByteSizeMergePolicy"/>
-->
<!--
Expert: The Merge Scheduler in Lucene controls how merges are
performed. The ConcurrentMergeScheduler (Lucene 2.3 default) can
perform merges in the background using separate threads. The
SerialMergeScheduler (Lucene 2.2 default) does not.
-->
<!--
<mergeScheduler
class="org.apache.lucene.index.ConcurrentMergeScheduler"/>
-->
<!--
This option specifies which Lucene LockFactory implementation to
use. single = SingleInstanceLockFactory - suggested for a
read-only index or when there is no possibility of another process
trying to modify the index. native = NativeFSLockFactory - uses OS
native file locking simple = SimpleFSLockFactory - uses a plain
file for locking (For backwards compatibility with Solr 1.2,
'simple' is the default if not specified.)
-->
<lockType>native</lockType>
<!--
Expert: Controls how often Lucene loads terms into memory
-->
<!--<termIndexInterval>256</termIndexInterval>-->
</indexDefaults>
<mainIndex>
<!-- options specific to the main on-disk lucene index -->
<useCompoundFile>false</useCompoundFile>
<ramBufferSizeMB>32</ramBufferSizeMB>
<mergeFactor>10</mergeFactor>
<!-- Deprecated -->
<!--<maxBufferedDocs>1000</maxBufferedDocs>-->
<!--<maxMergeDocs>2147483647</maxMergeDocs>-->
<!--
inherit from indexDefaults <maxFieldLength>10000</maxFieldLength>
-->
<!--
If true, unlock any held write or commit locks on startup. This
defeats the locking mechanism that allows multiple processes to
safely access a lucene index, and should be used with care. This
is not needed if lock type is 'none' or 'single'
-->
<unlockOnStartup>false</unlockOnStartup>
<!--
If true, IndexReaders will be reopened (often more efficient)
instead of closed and then opened.
-->
<reopenReaders>true</reopenReaders>
<!--
Expert: Controls how often Lucene loads terms into memory. Default
is 128 and is likely good for most everyone.
-->
<!--<termIndexInterval>256</termIndexInterval>-->
<!--
Custom deletion policies can specified here. The class must
implement org.apache.lucene.index.IndexDeletionPolicy.
http://lucene.apache.org/java/2_3_2/api/org/apache/lucene/index/IndexDeletionPolicy.html
The standard Solr IndexDeletionPolicy implementation supports
deleting index commit points on number of commits, age of commit
point and optimized status. The latest commit point should always
be preserved regardless of the criteria.
-->
<deletionPolicy class="solr.SolrDeletionPolicy">
<!-- The number of commit points to be kept -->
<str name="maxCommitsToKeep">1</str>
<!-- The number of optimized commit points to be kept -->
<str name="maxOptimizedCommitsToKeep">0</str>
<!--
Delete all commit points once they have reached the given age.
Supports DateMathParser syntax e.g. <str
name="maxCommitAge">30MINUTES</str> <str
name="maxCommitAge">1DAY</str>
-->
</deletionPolicy>
<!--
To aid in advanced debugging, you may turn on IndexWriter debug
logging. Setting to true will set the file that the underlying
Lucene IndexWriter will write its debug infostream to.
-->
<infoStream file="INFOSTREAM.txt">false</infoStream>
</mainIndex>
<!--
Enables JMX if and only if an existing MBeanServer is found, use
this if you want to configure JMX through JVM parameters. Remove
this to disable exposing Solr configuration and statistics to JMX.
If you want to connect to a particular server, specify the agentId
e.g. <jmx agentId="myAgent" /> If you want to start a new
MBeanServer, specify the serviceUrl e.g <jmx
serviceUrl="service:jmx:rmi:///jndi/rmi://localhost:9999/solr"/> For
more details see http://wiki.apache.org/solr/SolrJmx
-->
<jmx/>
<!-- the default high-performance update handler -->
<updateHandler class="solr.DirectUpdateHandler2">
<!--
A prefix of "solr." for class names is an alias that causes solr
to search appropriate packages, including
org.apache.solr.(search|update|request|core|analysis)
-->
<!--
Perform a <commit/> automatically under certain conditions:
maxDocs - number of updates since last commit is greater than this
maxTime - oldest uncommited update (in ms) is this long ago
Instead of enabling autoCommit, consider using "commitWithin" when
adding documents. http://wiki.apache.org/solr/UpdateXmlMessages
<autoCommit> <maxDocs>10000</maxDocs> <maxTime>1000</maxTime>
</autoCommit>
-->
<!--
The RunExecutableListener executes an external command from a hook
such as postCommit or postOptimize. exe - the name of the
executable to run dir - dir to use as the current working
directory. default="." wait - the calling thread waits until the
executable returns. default="true" args - the arguments to pass to
the program. default=nothing env - environment variables to set.
default=nothing
-->
<!--
A postCommit event is fired after every commit or optimize command
<listener event="postCommit" class="solr.RunExecutableListener">
<str name="exe">solr/bin/snapshooter</str> <str name="dir">.</str>
<bool name="wait">true</bool> <arr name="args"> <str>arg1</str>
<str>arg2</str> </arr> <arr name="env"> <str>MYVAR=val1</str>
</arr> </listener>
-->
<!--
A postOptimize event is fired only after every optimize command
<listener event="postOptimize" class="solr.RunExecutableListener">
<str name="exe">snapshooter</str> <str name="dir">solr/bin</str>
<bool name="wait">true</bool> </listener>
-->
</updateHandler>
<!--
Use the following format to specify a custom IndexReaderFactory -
allows for alternate IndexReader implementations. ** Experimental
Feature ** Please note - Using a custom IndexReaderFactory may
prevent certain other features from working. The API to
IndexReaderFactory may change without warning or may even be removed
from future releases if the problems cannot be resolved. ** Features
that may not work with custom IndexReaderFactory ** The
ReplicationHandler assumes a disk-resident index. Using a custom
IndexReader implementation may cause incompatibility with
ReplicationHandler and may cause replication to not work correctly.
See SOLR-1366 for details. <indexReaderFactory
name="IndexReaderFactory" class="package.class"> Parameters as
required by the implementation </indexReaderFactory >
-->
<!-- To set the termInfosIndexDivisor, do this: -->
<!--
<indexReaderFactory name="IndexReaderFactory"
class="org.apache.solr.core.StandardIndexReaderFactory"> <int
name="termInfosIndexDivisor">12</int> </indexReaderFactory >
-->
<query>
<!--
Maximum number of clauses in a boolean query... in the past, this
affected range or prefix queries that expanded to big boolean
queries - built in Solr query parsers no longer create queries
with this limitation. An exception is thrown if exceeded.
-->
<maxBooleanClauses>1024</maxBooleanClauses>
<!--
There are two implementations of cache available for Solr,
LRUCache, based on a synchronized LinkedHashMap, and FastLRUCache,
based on a ConcurrentHashMap. FastLRUCache has faster gets and
slower puts in single threaded operation and thus is generally
faster than LRUCache when the hit ratio of the cache is high (>
75%), and may be faster under other scenarios on multi-cpu
systems.
-->
<!--
Cache used by SolrIndexSearcher for filters (DocSets), unordered
sets of *all* documents that match a query. When a new searcher is
opened, its caches may be prepopulated or "autowarmed" using data
from caches in the old searcher. autowarmCount is the number of
items to prepopulate. For LRUCache, the autowarmed items will be
the most recently accessed items. Parameters: class - the
SolrCache implementation LRUCache or FastLRUCache size - the
maximum number of entries in the cache initialSize - the initial
capacity (number of entries) of the cache. (seel
java.util.HashMap) autowarmCount - the number of entries to
prepopulate from and old cache.
-->
<filterCache class="solr.FastLRUCache" size="512"
initialSize="512" autowarmCount="0"/>
<!--
Cache used to hold field values that are quickly accessible by
document id. The fieldValueCache is created by default even if not
configured here. <fieldValueCache class="solr.FastLRUCache"
size="512" autowarmCount="128" showItems="32" />
-->
<!--
queryResultCache caches results of searches - ordered lists of
document ids (DocList) based on a query, a sort, and the range of
documents requested.
-->
<documentCache class="org.apache.directmemory.solr.SolrOffHeapCache" size="10000"
initialSize="1000" autowarmCount="0" buffers="2"
serializerClassName="org.apache.directmemory.serialization.protostuff.ProtoStuffWithLinkedBufferSerializer"/>
<!--
documentCache caches Lucene Document objects (the stored fields
for each document). Since Lucene internal document ids are
transient, this cache will not be autowarmed.
-->
<queryResultCache class="org.apache.directmemory.solr.SolrOffHeapCache" size="10000"
initialSize="1000" autowarmCount="0" buffers="2"
serializerClassName="org.apache.directmemory.serialization.protostuff.ProtoStuffWithLinkedBufferSerializer"/>
<!--
If true, stored fields that are not requested will be loaded
lazily. This can result in a significant speed improvement if the
usual case is to not load all stored fields, especially if the
skipped fields are large compressed text fields.
-->
<enableLazyFieldLoading>true</enableLazyFieldLoading>
<!--
Example of a generic cache. These caches may be accessed by name
through SolrIndexSearcher.getCache(),cacheLookup(), and
cacheInsert(). The purpose is to enable easy caching of
user/application level data. The regenerator argument should be
specified as an implementation of solr.search.CacheRegenerator if
autowarming is desired.
-->
<!--
<cache name="myUserCache" class="solr.LRUCache" size="4096"
initialSize="1024" autowarmCount="1024"
regenerator="org.mycompany.mypackage.MyRegenerator" />
-->
<!--
An optimization that attempts to use a filter to satisfy a search.
If the requested sort does not include score, then the filterCache
will be checked for a filter matching the query. If found, the
filter will be used as the source of document ids, and then the
sort will be applied to that.
<useFilterForSortedQuery>true</useFilterForSortedQuery>
-->
<!--
An optimization for use with the queryResultCache. When a search
is requested, a superset of the requested number of document ids
are collected. For example, if a search for a particular query
requests matching documents 10 through 19, and queryWindowSize is
50, then documents 0 through 49 will be collected and cached. Any
further requests in that range can be satisfied via the cache.
-->
<queryResultWindowSize>20</queryResultWindowSize>
<!--
Maximum number of documents to cache for any entry in the
queryResultCache.
-->
<queryResultMaxDocsCached>200</queryResultMaxDocsCached>
<!--
a newSearcher event is fired whenever a new searcher is being
prepared and there is a current searcher handling requests (aka
registered). It can be used to prime certain caches to prevent
long request times for certain requests.
-->
<!--
QuerySenderListener takes an array of NamedList and executes a
local query request for each NamedList in sequence.
-->
<listener event="newSearcher" class="solr.QuerySenderListener">
<arr name="queries">
<!--
<lst> <str name="q">solr</str> <str name="start">0</str> <str
name="rows">10</str> </lst> <lst> <str name="q">rocks</str>
<str name="start">0</str> <str name="rows">10</str> </lst>
<lst><str name="q">static newSearcher warming query from
solrconfig.xml</str></lst>
-->
</arr>
</listener>
<!--
a firstSearcher event is fired whenever a new searcher is being
prepared but there is no current registered searcher to handle
requests or to gain autowarming data from.
-->
<listener event="firstSearcher" class="solr.QuerySenderListener">
<arr name="queries">
<lst>
<str name="q">solr rocks</str>
<str name="start">0</str>
<str name="rows">10</str>
</lst>
<lst>
<str name="q">static firstSearcher warming query from
solrconfig.xml
</str>
</lst>
</arr>
</listener>
<!--
If a search request comes in and there is no current registered
searcher, then immediately register the still warming searcher and
use it. If "false" then all requests will block until the first
searcher is done warming.
-->
<useColdSearcher>false</useColdSearcher>
<!--
Maximum number of searchers that may be warming in the background
concurrently. An error is returned if this limit is exceeded.
Recommend 1-2 for read-only slaves, higher for masters w/o cache
warming.
-->
<maxWarmingSearchers>2</maxWarmingSearchers>
</query>
<!--
Let the dispatch filter handler /select?qt=XXX handleSelect=true
will use consistent error handling for /select and /update
handleSelect=false will use solr1.1 style error formatting
-->
<requestDispatcher handleSelect="true">
<!--
Make sure your system has some authentication before enabling
remote streaming!
-->
<requestParsers enableRemoteStreaming="true"
multipartUploadLimitInKB="2048000"/>
<!--
Set HTTP caching related parameters (for proxy caches and
clients). To get the behaviour of Solr 1.2 (ie: no caching related
headers) use the never304="true" option and do not specify a value
for <cacheControl>
-->
<!-- <httpCaching never304="true"> -->
<httpCaching lastModifiedFrom="openTime" etagSeed="Solr">
<!--
lastModFrom="openTime" is the default, the Last-Modified value
(and validation against If-Modified-Since requests) will all be
relative to when the current Searcher was opened. You can change
it to lastModFrom="dirLastMod" if you want the value to exactly
corrispond to when the physical index was last modified.
etagSeed="..." is an option you can change to force the ETag
header (and validation against If-None-Match requests) to be
differnet even if the index has not changed (ie: when making
significant changes to your config file) lastModifiedFrom and
etagSeed are both ignored if you use the never304="true" option.
-->
<!--
If you include a <cacheControl> directive, it will be used to
generate a Cache-Control header, as well as an Expires header if
the value contains "max-age=" By default, no Cache-Control
header is generated. You can use the <cacheControl> option even
if you have set never304="true"
-->
<!-- <cacheControl>max-age=30, public</cacheControl> -->
</httpCaching>
</requestDispatcher>
<!--
requestHandler plugins... incoming queries will be dispatched to the
correct handler based on the path or the qt (query type) param.
Names starting with a '/' are accessed with the a path equal to the
registered name. Names without a leading '/' are accessed with:
http://host/app/select?qt=name If no qt is defined, the
requestHandler that declares default="true" will be used.
-->
<requestHandler name="standard" class="solr.SearchHandler"
default="true">
<!-- default values for query parameters -->
<lst name="defaults">
<str name="echoParams">explicit</str>
<!--
<int name="rows">10</int> <str name="fl">*</str> <str
name="version">2.1</str>
-->
</lst>
</requestHandler>
<requestHandler name="/admin/"
class="org.apache.solr.handler.admin.AdminHandlers"/>
<!-- ping/healthcheck -->
<requestHandler name="/admin/ping" class="PingRequestHandler">
<lst name="defaults">
<str name="qt">standard</str>
<str name="q">solrpingquery</str>
<str name="echoParams">all</str>
</lst>
</requestHandler>
<!-- Echo the request contents back to the client -->
<requestHandler name="/debug/dump" class="solr.DumpRequestHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<!-- for all params (including the default etc) use: 'all' -->
<str name="echoHandler">true</str>
</lst>
</requestHandler>
<highlighting>
<!-- Configure the standard fragmenter -->
<!-- This could most likely be commented out in the "default" case -->
<fragmenter name="gap"
class="org.apache.solr.highlight.GapFragmenter" default="true">
<lst name="defaults">
<int name="hl.fragsize">100</int>
</lst>
</fragmenter>
<!--
A regular-expression-based fragmenter (f.i., for sentence
extraction)
-->
<fragmenter name="regex"
class="org.apache.solr.highlight.RegexFragmenter">
<lst name="defaults">
<!-- slightly smaller fragsizes work better because of slop -->
<int name="hl.fragsize">70</int>
<!-- allow 50% slop on fragment sizes -->
<float name="hl.regex.slop">0.5</float>
<!-- a basic sentence pattern -->
<str name="hl.regex.pattern">[-\w ,/\n\"']{20,200}</str>
</lst>
</fragmenter>
<!-- Configure the standard formatter -->
<formatter name="html" class="org.apache.solr.highlight.HtmlFormatter"
default="true">
<lst name="defaults">
<str name="hl.simple.pre"><![CDATA[<em>]]></str>
<str name="hl.simple.post"><![CDATA[</em>]]></str>
</lst>
</formatter>
</highlighting>
<!--
An example dedup update processor that creates the "id" field on the
fly based on the hash code of some other fields. This example has
overwriteDupes set to false since we are using the id field as the
signatureField and Solr will maintain uniqueness based on that
anyway. You have to link the chain to an update handler above to use
it ie: <requestHandler name="/update
"class="solr.XmlUpdateRequestHandler"> <lst name="defaults"> <str
name="update.processor">dedupe</str> </lst> </requestHandler>
-->
<!--
<updateRequestProcessorChain name="dedupe"> <processor
class="org.apache.solr.update.processor.SignatureUpdateProcessorFactory">
<bool name="enabled">true</bool> <str name="signatureField">id</str>
<bool name="overwriteDupes">false</bool> <str
name="fields">name,features,cat</str> <str
name="signatureClass">org.apache.solr.update.processor.Lookup3Signature</str>
</processor> <processor class="solr.LogUpdateProcessorFactory" />
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
-->
<!--
queryResponseWriter plugins... query responses will be written using
the writer specified by the 'wt' request parameter matching the name
of a registered writer. The "default" writer is the default and will
be used if 'wt' is not specified in the request. XMLResponseWriter
will be used if nothing is specified here. The json, python, and
ruby writers are also available by default. <queryResponseWriter
name="xml" class="org.apache.solr.request.XMLResponseWriter"
default="true"/> <queryResponseWriter name="json"
class="org.apache.solr.request.JSONResponseWriter"/>
<queryResponseWriter name="python"
class="org.apache.solr.request.PythonResponseWriter"/>
<queryResponseWriter name="ruby"
class="org.apache.solr.request.RubyResponseWriter"/>
<queryResponseWriter name="php"
class="org.apache.solr.request.PHPResponseWriter"/>
<queryResponseWriter name="phps"
class="org.apache.solr.request.PHPSerializedResponseWriter"/>
<queryResponseWriter name="custom"
class="com.example.MyResponseWriter"/>
-->
<!--
XSLT response writer transforms the XML output by any xslt file
found in Solr's conf/xslt directory. Changes to xslt files are
checked for every xsltCacheLifetimeSeconds.
-->
<queryResponseWriter name="xslt"
class="org.apache.solr.request.XSLTResponseWriter">
<int name="xsltCacheLifetimeSeconds">5</int>
</queryResponseWriter>
<!--
example of registering a custom function parser <valueSourceParser
name="myfunc" class="com.mycompany.MyValueSourceParser" />
-->
<!-- config for the admin interface -->
<admin>
<defaultQuery>*</defaultQuery>
<!--
configure a healthcheck file for servers behind a loadbalancer
<healthcheck type="file">server-enabled</healthcheck>
-->
</admin>
</config>