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

<config>

  <jmx />

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

  <!-- 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}"/>

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

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

  <requestHandler name="standard" class="solr.StandardRequestHandler">
  	<bool name="httpCaching">true</bool>
  	<arr name="first-components">
      <str>component1</str>
    </arr>
    <arr name="last-components">
      <str>component2</str>
    </arr>
  </requestHandler>

  <requestHandler name="/update" class="solr.UpdateRequestHandler"  />

  <!-- enable streaming for testing... -->
  <requestDispatcher handleSelect="true" >
    <requestParsers enableRemoteStreaming="true" multipartUploadLimitInKB="2048" />
    <httpCaching lastModifiedFrom="openTime" etagSeed="Solr" never304="false">
      <cacheControl>max-age=30, public</cacheControl>
    </httpCaching>
  </requestDispatcher>

  <admin>
    <defaultQuery>solr</defaultQuery>
    <gettableFiles>solrconfig.xml schema.xml admin-extra.html</gettableFiles>
  </admin>
  
 <searchComponent name="component1" class="org.apache.solr.search.MockSearchComponent">
     <str name="testParam">foo</str>
 </searchComponent>
 <searchComponent name="component2" class="org.apache.solr.search.MockSearchComponent">
     <str name="testParam">bar</str>
 </searchComponent>

</config>
