<?xml version="1.0" ?>

<!--
 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.
-->

<!-- This is a "kitchen sink" config file that tests can use.
     When writting a new test, feel free to add *new* items (plugins,
     config options, etc...) as long as they don't break any existing
     tests.  if you need to test something esoteric please add a new
     "solrconfig-your-esoteric-purpose.xml" config file.

     Note in particular that this test is used by MinimalSchemaTest so
     Anything added to this file needs to work correctly even if there
     is now uniqueKey or defaultSearch Field.
  -->

<config>

  <jmx />

  <!-- Used to specify an alternate directory to hold all index data.
       It defaults to "index" if not present, and should probably
       not be changed if replication is in use. -->
  <dataDir>${solr.data.dir:}</dataDir>

  <!--  The DirectoryFactory to use for indexes.
        solr.StandardDirectoryFactory, the default, is filesystem based.
        solr.RAMDirectoryFactory is memory based and not persistent. -->
  <directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.RAMDirectoryFactory}">
    <double name="maxWriteMBPerSecDefault">1000000</double>
    <double name="maxWriteMBPerSecFlush">2000000</double>
    <double name="maxWriteMBPerSecMerge">3000000</double>
    <double name="maxWriteMBPerSecRead">4000000</double>
    <str name="solr.hdfs.home">${solr.hdfs.home:}</str>
    <bool name="solr.hdfs.blockcache.enabled">${solr.hdfs.blockcache.enabled:true}</bool> 
    <bool name="solr.hdfs.blockcache.global">${solr.hdfs.blockcache.global:true}</bool>
    <bool name="solr.hdfs.blockcache.write.enabled">${solr.hdfs.blockcache.write.enabled:false}</bool>
    <int name="solr.hdfs.blockcache.blocksperbank">${solr.hdfs.blockcache.blocksperbank:10}</int>
    <int name="solr.hdfs.blockcache.slab.count">${solr.hdfs.blockcache.slab.count:1}</int>
  </directoryFactory>

  <schemaFactory class="ClassicIndexSchemaFactory"/>

  <luceneMatchVersion>${tests.luceneMatchVersion:LATEST}</luceneMatchVersion>

  <statsCache class="${solr.statsCache:}"/>

  <xi:include href="solrconfig.snippet.randomindexconfig.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>

  <updateHandler class="solr.DirectUpdateHandler2">

    <autoCommit>
      <maxTime>${solr.autoCommit.maxTime:-1}</maxTime>
    </autoCommit>

    <!-- autocommit pending docs if certain criteria are met
    <autoCommit>
      <maxDocs>10000</maxDocs>
      <maxTime>3600000</maxTime>
    </autoCommit>
    -->
    
    <updateLog enable="${enable.update.log:true}">
      <str name="dir">${solr.ulog.dir:}</str>
    </updateLog> 
    
    <commitWithin>
      <softCommit>${solr.commitwithin.softcommit:true}</softCommit>
    </commitWithin>

  </updateHandler>

  <query>
    <!-- Maximum number of clauses in a boolean query... can affect
        range or wildcard queries that expand to big boolean
        queries.  An exception is thrown if exceeded.
    -->
    <maxBooleanClauses>${solr.max.booleanClauses:1024}</maxBooleanClauses>

    <!-- Cache specification for Filters or DocSets - unordered set of *all* documents
         that match a particular query.
      -->
    <filterCache
      size="512"
      initialSize="512"
      autowarmCount="2"/>

    <queryResultCache
      size="512"
      initialSize="512"
      autowarmCount="2"/>

    <documentCache
      size="512"
      initialSize="512"
      autowarmCount="0"/>

    <cache name="perSegFilter"
      size="10"
      initialSize="0"
      autowarmCount="10" />

    <!-- If true, stored fields that are not requested will be loaded lazily.
    -->
    <enableLazyFieldLoading>true</enableLazyFieldLoading>

    <!--

    <cache name="myUserCache"
      size="4096"
      initialSize="1024"
      autowarmCount="1024"
      regenerator="MyRegenerator"
      />
    -->

    <!--
    <useFilterForSortedQuery>true</useFilterForSortedQuery>
    -->

    <queryResultWindowSize>10</queryResultWindowSize>

    <!-- boolToFilterOptimizer converts boolean clauses with zero boost
         into cached filters if the number of docs selected by the clause exceeds
         the threshold (represented as a fraction of the total index)
    -->
    <boolTofilterOptimizer enabled="false" cacheSize="32" threshold=".05"/>

    <!-- a newSearcher event is fired whenever a new searcher is being prepared
         and there is a current searcher handling requests (aka registered). -->
    <!-- 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>
      </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 prewarming data from. -->
    <!--
    <listener event="firstSearcher" class="solr.QuerySenderListener">
      <arr name="queries">
        <lst> <str name="q">fast_warm</str> <str name="start">0</str> <str name="rows">10</str> </lst>
      </arr>
    </listener>
    -->

    <slowQueryThresholdMillis>2000</slowQueryThresholdMillis>

  </query>
  
  <queryResponseWriter name="xml" default="true"
                       class="solr.XMLResponseWriter" />

  <!-- An alternate set representation that uses an integer hash to store filters (sets of docids).
       If the set cardinality <= maxSize elements, then HashDocSet will be used instead of the bitset
       based HashBitset. -->

  <!-- requestHandler plugins
  -->
  <requestHandler name="/select" class="solr.SearchHandler">
    <bool name="httpCaching">true</bool>
  </requestHandler>

  <requestHandler name="/dismax" class="solr.SearchHandler" >
    <lst name="defaults">
     <str name="defType">dismax</str>
     <str name="q.alt">*:*</str>
     <float name="tie">0.01</float>
     <str name="qf">
        text^0.5 features_t^1.0 subject^1.4 title_stemmed^2.0
     </str>
     <str name="pf">
        text^0.2 features_t^1.1 subject^1.4 title_stemmed^2.0 title^1.5
     </str>
     <str name="bf">
        weight^0.5 recip(rord(id),1,1000,1000)^0.3
     </str>
     <str name="mm">
        3&lt;-1 5&lt;-2 6&lt;90%
     </str>
     <int name="ps">100</int>
    </lst>
  </requestHandler>

  <requestHandler name="/mock" class="org.apache.solr.core.MockQuerySenderListenerReqHandler"/>

  <!-- test query parameter defaults -->
  <requestHandler name="/defaults" class="solr.SearchHandler">
    <lst name="defaults">
      <int name="rows">4</int>
      <bool name="hl">true</bool>
      <str name="hl.fl">text,name,subject,title,whitetok</str>
    </lst>
  </requestHandler>

  <!-- test query parameter defaults -->
  <requestHandler name="/lazy" class="solr.SearchHandler" startup="lazy">
    <lst name="defaults">
      <int name="rows">4</int>
      <bool name="hl">true</bool>
      <str name="hl.fl">text,name,subject,title,whitetok</str>
    </lst>
  </requestHandler>



  <searchComponent name="spellcheck" class="org.apache.solr.handler.component.SpellCheckComponent">
    <!-- This is slightly different from the field value so we can test dealing with token offset changes -->
    <str name="queryAnalyzerFieldType">lowerpunctfilt</str>

    <lst name="spellchecker">
      <str name="name">default</str>
      <str name="field">lowerfilt</str>
      <str name="spellcheckIndexDir">spellchecker1</str>
      <str name="buildOnCommit">false</str>
    </lst>
    <lst name="spellchecker">
      <str name="name">direct</str>
      <str name="classname">DirectSolrSpellChecker</str>
      <str name="field">lowerfilt</str>
      <int name="minQueryLength">3</int>
    </lst>
    <lst name="spellchecker">
      <str name="name">wordbreak</str>
      <str name="classname">solr.WordBreakSolrSpellChecker</str>      
      <str name="field">lowerfilt</str>
      <str name="combineWords">true</str>
      <str name="breakWords">true</str>
      <int name="maxChanges">10</int>
    </lst>
    <lst name="spellchecker">
      <str name="name">multipleFields</str>
      <str name="field">lowerfilt1and2</str>
      <str name="spellcheckIndexDir">spellcheckerMultipleFields</str>
      <str name="buildOnCommit">false</str>
     </lst>
    <!-- Example of using different distance measure -->
    <lst name="spellchecker">
      <str name="name">jarowinkler</str>
      <str name="field">lowerfilt</str>
      <!-- Use a different Distance Measure -->
      <str name="distanceMeasure">org.apache.lucene.search.spell.JaroWinklerDistance</str>
      <str name="spellcheckIndexDir">spellchecker2</str>

    </lst>
    <lst name="spellchecker">
      <str name="classname">solr.FileBasedSpellChecker</str>
      <str name="name">external</str>
      <str name="sourceLocation">spellings.txt</str>
      <str name="characterEncoding">UTF-8</str>
      <str name="spellcheckIndexDir">spellchecker3</str>
    </lst>
    <!-- Comparator -->
    <lst name="spellchecker">
      <str name="name">freq</str>
      <str name="field">lowerfilt</str>
      <str name="spellcheckIndexDir">spellcheckerFreq</str>
      <!-- comparatorClass be one of:
        1. score (default)
        2. freq (Frequency first, then score)
        3. A fully qualified class name
       -->
      <str name="comparatorClass">freq</str>
      <str name="buildOnCommit">false</str>
    </lst>
    <lst name="spellchecker">
      <str name="name">fqcn</str>
      <str name="field">lowerfilt</str>
      <str name="spellcheckIndexDir">spellcheckerFQCN</str>
      <str name="comparatorClass">org.apache.solr.spelling.SampleComparator</str>
      <str name="buildOnCommit">false</str>
    </lst>
    <lst name="spellchecker">
      <str name="name">perDict</str>
      <str name="classname">org.apache.solr.handler.component.DummyCustomParamSpellChecker</str>
      <str name="field">lowerfilt</str>
    </lst>
  </searchComponent>

  <searchComponent name="termsComp" class="org.apache.solr.handler.component.TermsComponent"/>

  <requestHandler name="/terms" class="org.apache.solr.handler.component.SearchHandler">
    <arr name="components">
      <str>termsComp</str>
    </arr>
  </requestHandler>
  
  
  <!--
  The SpellingQueryConverter to convert raw (CommonParams.Q) queries into tokens.  Uses a simple regular expression
   to strip off field markup, boosts, ranges, etc. but it is not guaranteed to match an exact parse from the query parser.
   -->
  <queryConverter name="queryConverter" class="org.apache.solr.spelling.SpellingQueryConverter"/>

  <requestHandler name="/spellCheckCompRH" class="org.apache.solr.handler.component.SearchHandler">
    <lst name="defaults">
      <!-- omp = Only More Popular -->
      <str name="spellcheck.onlyMorePopular">false</str>
      <!-- exr = Extended Results -->
      <str name="spellcheck.extendedResults">false</str>
      <!--  The number of suggestions to return -->
      <str name="spellcheck.count">1</str>
    </lst>
    <arr name="last-components">
      <str>spellcheck</str>
    </arr>
  </requestHandler>
  <requestHandler name="/spellCheckCompRH_Direct" class="org.apache.solr.handler.component.SearchHandler">
    <lst name="defaults">
      <str name="spellcheck.dictionary">direct</str>
      <str name="spellcheck.onlyMorePopular">false</str>
      <str name="spellcheck.extendedResults">false</str>
      <str name="spellcheck.count">1</str>
    </lst>
    <arr name="last-components">
      <str>spellcheck</str>
    </arr>
  </requestHandler>
  <requestHandler name="/spellCheckWithWordbreak" class="org.apache.solr.handler.component.SearchHandler">
    <lst name="defaults">
      <str name="spellcheck.dictionary">default</str>
      <str name="spellcheck.dictionary">wordbreak</str>
      <str name="spellcheck.count">20</str>
    </lst>
    <arr name="last-components">
      <str>spellcheck</str>
    </arr>
  </requestHandler>
  <requestHandler name="/spellCheckWithWordbreak_Direct" class="org.apache.solr.handler.component.SearchHandler">
    <lst name="defaults">
      <str name="spellcheck.dictionary">direct</str>
      <str name="spellcheck.dictionary">wordbreak</str>
      <str name="spellcheck.count">20</str>
    </lst>
    <arr name="last-components">
      <str>spellcheck</str>
    </arr>
  </requestHandler>
  <requestHandler name="/spellCheckCompRH1" class="org.apache.solr.handler.component.SearchHandler">
      <lst name="defaults">
        <str name="defType">dismax</str>
        <str name="qf">lowerfilt1^1</str>
      </lst>
      <arr name="last-components">
        <str>spellcheck</str>
      </arr>
 </requestHandler>
 
  <requestHandler name="/mltrh" class="org.apache.solr.handler.component.SearchHandler">

  </requestHandler>

  <searchComponent name="tvComponent" class="org.apache.solr.handler.component.TermVectorComponent"/>

  <requestHandler name="/tvrh" class="org.apache.solr.handler.component.SearchHandler">
    <lst name="defaults">

    </lst>
    <arr name="last-components">
      <str>tvComponent</str>
    </arr>
  </requestHandler>

  <requestHandler name="/mlt" class="solr.MoreLikeThisHandler">
  </requestHandler>

  <searchComponent class="solr.HighlightComponent" name="highlight">
  <highlighting>
   <!-- Configure the standard fragmenter -->
   <fragmenter name="gap" class="org.apache.solr.highlight.GapFragmenter" default="true">
    <lst name="defaults">
     <int name="hl.fragsize">100</int>
    </lst>
   </fragmenter>

   <fragmenter name="regex" class="org.apache.solr.highlight.RegexFragmenter">
    <lst name="defaults">
     <int name="hl.fragsize">70</int>
    </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>

   <!-- Configure the standard fragListBuilder -->
   <fragListBuilder name="simple" class="org.apache.solr.highlight.SimpleFragListBuilder" default="true"/>

   <!-- Configure the standard fragmentsBuilder -->
   <fragmentsBuilder name="simple" class="org.apache.solr.highlight.SimpleFragmentsBuilder" default="true"/>
   <fragmentsBuilder name="scoreOrder" class="org.apache.solr.highlight.ScoreOrderFragmentsBuilder"/>

   <boundaryScanner name="simple" class="solr.highlight.SimpleBoundaryScanner" default="true">
     <lst name="defaults">
       <str name="hl.bs.maxScan">10</str>
       <str name="hl.bs.chars">.,!? &#9;&#10;&#13;</str>
     </lst>
   </boundaryScanner>

   <boundaryScanner name="breakIterator" class="solr.highlight.BreakIteratorBoundaryScanner">
     <lst name="defaults">
       <str name="hl.bs.type">WORD</str>
       <str name="hl.bs.language">en</str>
       <str name="hl.bs.country">US</str>
     </lst>
   </boundaryScanner>
  </highlighting>
  </searchComponent>

  <requestDispatcher>
    <requestParsers enableRemoteStreaming="true" enableStreamBody="true" multipartUploadLimitInKB="-1" />
    <httpCaching lastModifiedFrom="openTime" etagSeed="Solr" never304="false">
      <cacheControl>max-age=30, public</cacheControl>
    </httpCaching>
  </requestDispatcher>

  <requestHandler name="/search-facet-def" class="solr.SearchHandler" >
    <lst name="defaults">
      <str name="facet.field">foo_s</str>
    </lst>
    <lst name="appends">
      <str name="facet.query">foo_s:bar</str>
    </lst>
  </requestHandler>
  <requestHandler name="/search-facet-invariants" class="solr.SearchHandler" >
    <lst name="invariants">
      <str name="facet.field">foo_s</str>
      <str name="facet.query">foo_s:bar</str>
    </lst>
  </requestHandler>
  
  <admin>
    <defaultQuery>solr</defaultQuery>
    <gettableFiles>solrconfig.xml schema.xml</gettableFiles>
  </admin>

  <!-- test getting system property -->
  <propTest attr1="${solr.test.sys.prop1}-$${literal}"
            attr2="${non.existent.sys.prop:default-from-config}">prefix-${solr.test.sys.prop2}-suffix</propTest>

  <queryParser name="foo" class="FooQParserPlugin"/>

  <updateRequestProcessorChain name="uniq-fields">
    <processor class="org.apache.solr.update.processor.UniqFieldsUpdateProcessorFactory">
      <arr name="fieldName">
        <str>uniq</str>
        <str>uniq2</str>
        <str>uniq3</str>
      </arr>      
    </processor>
    <processor class="solr.RunUpdateProcessorFactory" />
  </updateRequestProcessorChain>  

  <updateRequestProcessorChain name="distrib-dup-test-chain-explicit">
    <!-- explicit test using processors before and after distrib -->
    <processor class="solr.RegexReplaceProcessorFactory">
      <str name="fieldName">regex_dup_A_s</str>
      <str name="pattern">x</str>
      <str name="replacement">x_x</str>
    </processor>
    <processor class="solr.DistributedUpdateProcessorFactory" />
    <processor class="solr.RegexReplaceProcessorFactory">
      <str name="fieldName">regex_dup_B_s</str>
      <str name="pattern">x</str>
      <str name="replacement">x_x</str>
    </processor>
    <processor class="solr.RunUpdateProcessorFactory" />
  </updateRequestProcessorChain>  

  <updateRequestProcessorChain name="distrib-dup-test-chain-implicit">
    <!-- implicit test w/o distrib declared-->
    <processor class="solr.RegexReplaceProcessorFactory">
      <str name="fieldName">regex_dup_A_s</str>
      <str name="pattern">x</str>
      <str name="replacement">x_x</str>
    </processor>
    <processor class="solr.RegexReplaceProcessorFactory">
      <str name="fieldName">regex_dup_B_s</str>
      <str name="pattern">x</str>
      <str name="replacement">x_x</str>
    </processor>
    <processor class="solr.RunUpdateProcessorFactory" />
  </updateRequestProcessorChain>  

  <restManager>
    <!-- 
    IMPORTANT: Due to the Lucene SecurityManager, tests can only write to their runtime directory or below.
    But it's easier to just keep everything in memory for testing so no remnants are left behind.
    -->
    <str name="storageIO">org.apache.solr.rest.ManagedResourceStorage$InMemoryStorageIO</str>
  </restManager>

  <!-- warning: not a best practice; requests generally ought to be explicit to thus not require this -->
  <initParams path="/select,/dismax,/defaults,/lazy,/spellCheckCompRH,/spellCheckWithWordbreak,/spellCheckCompRH_Direct,/spellCheckCompRH1,/mltrh,/tvrh,/search-facet-def,/search-facet-invariants,/terms">
    <lst name="defaults">
      <str name="df">text</str>
    </lst>
  </initParams>

  <queryParser name="minhash" class="org.apache.solr.search.MinHashQParserPlugin" />

</config>
