<?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 testing, I need to create some custom directories on the fly, particularly for some of the new
     discovery-based core configuration. Trying a minimal configuration to cut down the setup time.
     use in conjunction with schema-minimal.xml perhaps? -->
<config>
  <luceneMatchVersion>LUCENE_4_1</luceneMatchVersion>

  <dataDir>${solr.data.dir:}</dataDir>

  <directoryFactory name="DirectoryFactory"
                    class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
  <schemaFactory class="ClassicIndexSchemaFactory"/>

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

  <jmx/>
  <updateHandler class="solr.DirectUpdateHandler2">
    <!--updateLog>
      <str name="dir">${solr.ulog.dir:}</str>
    </updateLog-->
  </updateHandler>

  <query>
    <enableLazyFieldLoading>true</enableLazyFieldLoading>
    <queryResultWindowSize>20</queryResultWindowSize>
    <queryResultMaxDocsCached>20</queryResultMaxDocsCached>

    <useColdSearcher>true</useColdSearcher>

    <maxWarmingSearchers>1</maxWarmingSearchers>

  </query>

  <requestDispatcher>
    <httpCaching never304="true"/>
  </requestDispatcher>

  <requestHandler name="/select" class="solr.SearchHandler">
    <lst name="defaults">
      <str name="echoParams">all</str>
      <str name="df">text</str>
      <str name="dummy1">${solr.core.name}</str>
      <str name="dummy2">${solr.core.dataDir}</str>
      <str name="dummy3">${solr.core.config}</str>
      <str name="dummy4">${solr.core.schema}</str>
      <str name="dummy5">${solr.core.transient}</str>
    </lst>

  </requestHandler>

  <queryResponseWriter name="json" class="solr.JSONResponseWriter">
    <!-- For the purposes of the tutorial, JSON responses are written as
     plain text so that they are easy to read in *any* browser.
     If you expect a MIME type of "application/json" just remove this override.
    -->
    <str name="content-type">text/plain; charset=UTF-8</str>
  </queryResponseWriter>
</config>
