<?xml version="1.0" encoding="UTF-8" ?>
<!--
 Solr Configuration for StoryCove Stories Core
 Optimized for story search with highlighting and faceting
-->
<config>
  <luceneMatchVersion>9.9.0</luceneMatchVersion>

  <!-- DataDir configuration -->
  <dataDir>${solr.data.dir:}</dataDir>

  <!-- Directory Factory -->
  <directoryFactory name="DirectoryFactory"
                    class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>

  <!-- CodecFactory -->
  <codecFactory class="solr.SchemaCodecFactory"/>

  <!-- Index Configuration -->
  <indexConfig>
    <lockType>${solr.lock.type:native}</lockType>
    <infoStream>true</infoStream>
  </indexConfig>

  <!-- JMX Configuration -->
  <jmx />

  <!-- Update Handler -->
  <updateHandler class="solr.DirectUpdateHandler2">
    <updateLog>
      <str name="dir">${solr.ulog.dir:}</str>
      <int name="numVersionBuckets">${solr.ulog.numVersionBuckets:65536}</int>
    </updateLog>

    <autoCommit>
      <maxTime>15000</maxTime>
      <openSearcher>false</openSearcher>
    </autoCommit>

    <autoSoftCommit>
      <maxTime>1000</maxTime>
    </autoSoftCommit>
  </updateHandler>

  <!-- Query Configuration -->
  <query>
    <maxBooleanClauses>1024</maxBooleanClauses>
    <filterCache class="solr.CaffeineCache"
                 size="512"
                 initialSize="512"
                 autowarmCount="0"/>
    <queryResultCache class="solr.CaffeineCache"
                     size="512"
                     initialSize="512"
                     autowarmCount="0"/>
    <documentCache class="solr.CaffeineCache"
                  size="512"
                  initialSize="512"
                  autowarmCount="0"/>
    <enableLazyFieldLoading>true</enableLazyFieldLoading>
   </query>

  <!-- Request Dispatcher -->
  <requestDispatcher handleSelect="false" >
    <requestParsers enableRemoteStreaming="true"
                    multipartUploadLimitInKB="2048000"
                    formdataUploadLimitInKB="2048"
                    addHttpRequestToContext="false"/>
    <httpCaching never304="true" />
  </requestDispatcher>

  <!-- Request Handlers -->

  <!-- Standard Select Handler -->
  <requestHandler name="/select" class="solr.SearchHandler">
    <lst name="defaults">
      <str name="echoParams">explicit</str>
      <int name="rows">10</int>
      <str name="df">text</str>
      <str name="wt">json</str>
      <str name="indent">true</str>
      <str name="hl">true</str>
      <str name="hl.fl">title,description</str>
      <str name="hl.simple.pre">&lt;em&gt;</str>
      <str name="hl.simple.post">&lt;/em&gt;</str>
      <str name="hl.fragsize">150</str>
      <str name="hl.maxAnalyzedChars">51200</str>
      <str name="facet">true</str>
      <str name="facet.field">authorName</str>
      <str name="facet.field">tagNames</str>
      <str name="facet.field">seriesName</str>
      <str name="facet.field">rating</str>
      <str name="facet.field">isRead</str>
      <str name="facet.mincount">1</str>
      <str name="facet.sort">count</str>
    </lst>
  </requestHandler>

  <!-- Update Handler -->
  <requestHandler name="/update" class="solr.UpdateRequestHandler" />

  <!-- Admin Handlers -->
  <requestHandler name="/admin/ping" class="solr.PingRequestHandler">
    <lst name="invariants">
      <str name="q">*:*</str>
    </lst>
    <lst name="defaults">
      <str name="echoParams">all</str>
    </lst>
  </requestHandler>

  <!-- More Like This Handler -->
  <requestHandler name="/mlt" class="solr.MoreLikeThisHandler">
    <lst name="defaults">
      <str name="mlt.fl">title,description</str>
      <int name="mlt.mindf">2</int>
      <int name="mlt.mintf">2</int>
      <str name="mlt.qf">title^2.0 description^1.0</str>
      <int name="rows">5</int>
    </lst>
  </requestHandler>

  <!-- Suggester Handler -->
  <requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
    <lst name="defaults">
      <str name="suggest">true</str>
      <str name="suggest.count">10</str>
    </lst>
    <arr name="components">
      <str>suggest</str>
    </arr>
  </requestHandler>

  <!-- Search Components -->
  <searchComponent name="suggest" class="solr.SuggestComponent">
    <lst name="suggester">
      <str name="name">storySuggester</str>
      <str name="lookupImpl">AnalyzingInfixLookupFactory</str>
      <str name="dictionaryImpl">DocumentDictionaryFactory</str>
      <str name="field">title</str>
      <str name="weightField">rating</str>
      <str name="suggestAnalyzerFieldType">text_general</str>
      <str name="buildOnStartup">false</str>
      <str name="buildOnCommit">false</str>
    </lst>
  </searchComponent>

  <!-- Response Writers -->
  <queryResponseWriter name="json" class="solr.JSONResponseWriter">
    <str name="content-type">application/json; charset=UTF-8</str>
  </queryResponseWriter>

</config>