<?xml version="1.0" encoding="UTF-8" ?>
<!--
  * schema.xml
  *
  * Copyright (c) 2014-2023 Simon Fraser University
  * Copyright (c) 2003-2023 John Willinsky
  * Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
  *
  * OJS solr/lucene search plugin index schema default configuration.
  *
  * NB: You may customize the index/query analyzer chains. Do not change the field
  * configuration, though, as this will probably break the OJS/solr indexing or
  * search protocol.
  -->

<schema name="ojs" version="1.0">

  <types>
    <!-- Numeric fields are used for numeric IDs -->
    <fieldType name="numId" class="solr.LongPointField" omitNorms="true" />
      <!--
       Numeric field types that index values using KD-trees.
       Point fields don't support FieldCache, so they must have docValues="true" if needed for sorting, faceting, functions, etc.
     -->
      <fieldType name="pint" class="solr.IntPointField" docValues="true"/>
      <fieldType name="pfloat" class="solr.FloatPointField" docValues="true"/>
      <fieldType name="plong" class="solr.LongPointField" docValues="true"/>
      <fieldType name="pdouble" class="solr.DoublePointField" docValues="true"/>

      <fieldType name="pints" class="solr.IntPointField" docValues="true" multiValued="true"/>
      <fieldType name="pfloats" class="solr.FloatPointField" docValues="true" multiValued="true"/>
      <fieldType name="plongs" class="solr.LongPointField" docValues="true" multiValued="true"/>
      <fieldType name="pdoubles" class="solr.DoublePointField" docValues="true" multiValued="true"/>
      <fieldType name="random" class="solr.RandomSortField" indexed="true"/>

      <!-- boolean type: "true" or "false" -->
      <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>
      <fieldType name="booleans" class="solr.BoolField" sortMissingLast="true" multiValued="true"/>


      <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
          <analyzer type="index">
              <tokenizer class="solr.StandardTokenizerFactory"/>
              <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
              <!-- in this example, we will only use synonyms at query time
              <filter class="solr.SynonymGraphFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
              <filter class="solr.FlattenGraphFilterFactory"/>
              -->
              <filter class="solr.LowerCaseFilterFactory"/>
          </analyzer>
          <analyzer type="query">
              <tokenizer class="solr.StandardTokenizerFactory"/>
              <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
              <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
              <filter class="solr.LowerCaseFilterFactory"/>
          </analyzer>
      </fieldType>



    <!-- Used for sorting, f.e. title. Do not use StrField type, cause then Case influences sort order -->
    <fieldType name="string" class="solr.TextField" sortMissingLast="true" omitNorms="true">
        <analyzer>
            <tokenizer class="solr.KeywordTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
    </fieldType>

    <!-- A Trie based date field for faster date range queries and date faceting. -->
    <!--TODO: Activate<fieldType name="tdate" class="solr.DatePointField" omitNorms="true" precisionStep="6" positionIncrementGap="0"/>-->

      <!-- KD-tree versions of date fields -->
      <fieldType name="pdate" class="solr.DatePointField" docValues="true"/>
      <fieldType name="pdates" class="solr.DatePointField" docValues="true" multiValued="true"/>

      <!--Binary data type. The data should be sent/retrieved in as Base64 encoded Strings -->
      <fieldType name="binary" class="solr.BinaryField"/>


      <!-- Faceting fields (you may have to change the tokenization patterns)-->
    <!-- General faceted field (comma- or semicolon-separated, e.g. discipline, type, subject, etc.) -->
    <fieldType name="facet" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.PatternTokenizerFactory" pattern="[,;]\s*"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

    <!-- Facet field with semicolon-separated facets (e.g. authors) -->
    <fieldType name="facet_semicolon_separated" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.PatternTokenizerFactory" pattern=";\s*"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

    <!-- Cross-language field -->
    <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.WordDelimiterGraphFilterFactory" splitOnCaseChange="0" catenateWords="1" catenateNumbers="1" />
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        <!--filter class="solr.ReversedWildcardFilterFactory" /-->
      </analyzer>
    </fieldType>

    <!-- Configuration for specific languages. You may add or change language-specific
         analysis chains here. The import process will automatically recognize new
         locales. -->
    <!-- Catalan -->
    <fieldType name="text_ca" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ca.txt"/>
        <filter class="solr.WordDelimiterGraphFilterFactory" splitOnCaseChange="0" catenateWords="1" catenateNumbers="1" />
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SnowballPorterFilterFactory" language="Catalan" />
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        <!--filter class="solr.ReversedWildcardFilterFactory" /-->
      </analyzer>
    </fieldType>

    <!-- Czech -->
    <fieldType name="text_cs" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_cs.txt" />
        <filter class="solr.WordDelimiterGraphFilterFactory" splitOnCaseChange="0" catenateWords="1" catenateNumbers="1" />
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.CzechStemFilterFactory"/>
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        <!--filter class="solr.ReversedWildcardFilterFactory" /-->
      </analyzer>
    </fieldType>

    <!-- Danish -->
    <fieldType name="text_da" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_da.txt" format="snowball" />
        <filter class="solr.WordDelimiterGraphFilterFactory" splitOnCaseChange="0" catenateWords="1" catenateNumbers="1" />
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SnowballPorterFilterFactory" language="Danish" />
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        <!--filter class="solr.ReversedWildcardFilterFactory" /-->
      </analyzer>
    </fieldType>

    <!-- German -->
    <fieldType name="text_de" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_de.txt" format="snowball" />
        <filter class="solr.WordDelimiterGraphFilterFactory" splitOnCaseChange="0" catenateWords="1" catenateNumbers="1" />
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.GermanLightStemFilterFactory"/>
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        <!--filter class="solr.ReversedWildcardFilterFactory" /-->
      </analyzer>
    </fieldType>

    <!-- Greek -->
    <fieldType name="text_el" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_el.txt"/>
        <filter class="solr.WordDelimiterGraphFilterFactory" splitOnCaseChange="0" catenateWords="1" catenateNumbers="1" />
        <filter class="solr.GreekLowerCaseFilterFactory"/>
        <filter class="solr.GreekStemFilterFactory"/>
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        <!--filter class="solr.ReversedWildcardFilterFactory" /-->
      </analyzer>
    </fieldType>

    <!-- English -->
    <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt" />
        <filter class="solr.WordDelimiterGraphFilterFactory" splitOnCaseChange="0" catenateWords="1" catenateNumbers="1" />
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.EnglishMinimalStemFilterFactory"/>
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        <!--filter class="solr.ReversedWildcardFilterFactory" /-->
      </analyzer>
    </fieldType>

    <!-- Spanish -->
    <fieldType name="text_es" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_es.txt" format="snowball" />
        <filter class="solr.WordDelimiterGraphFilterFactory" splitOnCaseChange="0" catenateWords="1" catenateNumbers="1" />
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SpanishLightStemFilterFactory"/>
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        <!--filter class="solr.ReversedWildcardFilterFactory" /-->
      </analyzer>
    </fieldType>

    <!-- Basque -->
    <fieldType name="text_eu" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_eu.txt" />
        <filter class="solr.WordDelimiterGraphFilterFactory" splitOnCaseChange="0" catenateWords="1" catenateNumbers="1" />
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SnowballPorterFilterFactory" language="Basque" />
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        <!--filter class="solr.ReversedWildcardFilterFactory" /-->
      </analyzer>
    </fieldType>

    <!-- Persian/Farsi -->
    <fieldType name="text_fa" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_fa.txt" />
        <filter class="solr.ArabicNormalizationFilterFactory"/>
        <filter class="solr.PersianNormalizationFilterFactory"/>
        <!--filter class="solr.ReversedWildcardFilterFactory" /-->
      </analyzer>
    </fieldType>

    <!-- French -->
    <fieldType name="text_fr" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_fr.txt" format="snowball" />
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.ElisionFilterFactory"/>
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.WordDelimiterGraphFilterFactory" splitOnCaseChange="0" catenateWords="1" catenateNumbers="1" />
        <filter class="solr.FrenchLightStemFilterFactory"/>
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        <!--filter class="solr.ReversedWildcardFilterFactory" /-->
      </analyzer>
    </fieldType>

    <!-- Galician -->
    <fieldType name="text_gl" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_gl.txt" />
        <filter class="solr.WordDelimiterGraphFilterFactory" splitOnCaseChange="0" catenateWords="1" catenateNumbers="1" />
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.GalicianStemFilterFactory"/>
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        <!--filter class="solr.ReversedWildcardFilterFactory" /-->
      </analyzer>
    </fieldType>

    <!-- Italian -->
    <fieldType name="text_it" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_it.txt" format="snowball" />
        <filter class="solr.WordDelimiterGraphFilterFactory" splitOnCaseChange="0" catenateWords="1" catenateNumbers="1" />
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.ItalianLightStemFilterFactory" />
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        <!--filter class="solr.ReversedWildcardFilterFactory" /-->
      </analyzer>
    </fieldType>

    <!-- Chinese, Japanese and Korean -->
<!--    <fieldType name="text_cjk" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
          <tokenizer class="solr.StandardTokenizerFactory"/>
          <filter class="solr.CJKBigramFilterFactory"/>
          <filter class="solr.CJKWidthFilterFactory"/>
          <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>
    -->

    <!-- Chinese (simplified): To use this filter, see solr/contrib/analysis-extras/README.txt
         for instructions on which jars you need to add to solr/lib
    <fieldType name="text_csimp" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <analyzer class="org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer"/>
      </analyzer>
    </fieldType>
    -->

    <!-- Dutch -->
    <fieldType name="text_nl" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_nl.txt" format="snowball" />
        <filter class="solr.WordDelimiterGraphFilterFactory" splitOnCaseChange="0" catenateWords="1" catenateNumbers="1" />
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SnowballPorterFilterFactory" language="Dutch" />
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        <!--filter class="solr.ReversedWildcardFilterFactory" /-->
      </analyzer>
    </fieldType>

    <!-- Norwegian -->
    <fieldType name="text_no" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_no.txt" format="snowball" />
        <filter class="solr.WordDelimiterGraphFilterFactory" splitOnCaseChange="0" catenateWords="1" catenateNumbers="1" />
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.NorwegianLightStemFilterFactory" />
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        <!--filter class="solr.ReversedWildcardFilterFactory" /-->
      </analyzer>
    </fieldType>

    <!-- Portuguese -->
    <fieldType name="text_pt" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_pt.txt" format="snowball" />
        <filter class="solr.WordDelimiterGraphFilterFactory" splitOnCaseChange="0" catenateWords="1" catenateNumbers="1" />
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.PortugueseLightStemFilterFactory" />
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        <!--filter class="solr.ReversedWildcardFilterFactory" /-->
      </analyzer>
    </fieldType>

    <!-- Romanian -->
    <fieldType name="text_ro" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ro.txt" />
        <filter class="solr.WordDelimiterGraphFilterFactory" splitOnCaseChange="0" catenateWords="1" catenateNumbers="1" />
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SnowballPorterFilterFactory" language="Romanian" />
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        <!--filter class="solr.ReversedWildcardFilterFactory" /-->
      </analyzer>
    </fieldType>

    <!-- Russian -->
    <fieldType name="text_ru" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ru.txt" format="snowball" />
        <filter class="solr.WordDelimiterGraphFilterFactory" splitOnCaseChange="0" catenateWords="1" catenateNumbers="1" />
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.RussianLightStemFilterFactory" />
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        <!--filter class="solr.ReversedWildcardFilterFactory" /-->
      </analyzer>
    </fieldType>

    <!-- Swedish -->
    <fieldType name="text_sv" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_sv.txt" format="snowball" />
        <filter class="solr.WordDelimiterGraphFilterFactory" splitOnCaseChange="0" catenateWords="1" catenateNumbers="1" />
        <filter class="solr.ASCIIFoldingFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SwedishLightStemFilterFactory" />
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        <!--filter class="solr.ReversedWildcardFilterFactory" /-->
      </analyzer>
    </fieldType>

    <!-- Turkish -->
    <fieldType name="text_tr" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_tr.txt" />
        <filter class="solr.WordDelimiterGraphFilterFactory" splitOnCaseChange="0" catenateWords="1" catenateNumbers="1" />
        <filter class="solr.TurkishLowerCaseFilterFactory"/>
        <filter class="solr.SnowballPorterFilterFactory" language="Turkish" />
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        <!--filter class="solr.ReversedWildcardFilterFactory" /-->
      </analyzer>
    </fieldType>

    <!-- Language-agnostic spellcheck analysis config -->
    <fieldType name="text_spell" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
      </analyzer>
    </fieldType>

    <!--
      External field to support ranking by an external fast-changing metric.
      Values in the external field should vary between 0.5 (half) and 2.0 (double).
      The default value is 1 (neutral ranking) so that the results for articles
      without specific ranking data will not distort results (especially for very
      new articles or in a central server case with inconsistently configured
      clients).
    -->
    <fieldType name="externalFile" keyField="submission_id" defVal="1" stored="false" indexed="false" class="solr.ExternalFileField"/>
   <!-- Dummy field type for ignored fields -->
    <fieldtype name="ignored" stored="false" indexed="false" multiValued="true" class="solr.StrField" />
  </types>

  <fields>
    <!-- Valid attributes for fields:
      name: mandatory - the name for the field
      type: mandatory - the name of a previously defined type from the
        <types> section
      indexed: true if this field should be indexed (searchable or sortable)
      stored: true if this field should be retrievable
      multiValued: true if this field may contain multiple values per document
      omitNorms: (expert) set to true to omit the norms associated with
        this field (this disables length normalization and index-time
        boosting for the field, and saves some memory).  Only full-text
        fields or fields that need an index-time boost need norms.
      termVectors: [false] set to true to store the term vector for a
        given field.
        When using MoreLikeThis, fields used for similarity should be
        stored for best performance.
      termPositions: Store position information with the term vector.
        This will increase storage costs.
      termOffsets: Store offset information with the term vector. This
        will increase storage costs.
      default: a value that should be used if no value is specified
        when adding a document.
    -->

    <field name="_version_" type="plong" indexed="false" stored="false" multiValued="false"/>

    <!-- Fields containing the unique document ID and other administrative IDs, e.g. a installation-specific GUID, the journal ID and the article ID -->
    <field name="submission_id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
    <field name="etl_galley_xml" type="string" indexed="true" stored="true" required="true" multiValued="false" />
    <field name="etl_file_name" type="string" indexed="true" stored="true" required="false" multiValued="false" />
    <field name="debug" type="string" indexed="true" stored="true" required="false" multiValued="false" />
    <field name="etl_file_locale" type="string" indexed="true" stored="true" required="false" multiValued="false" />

    <field name="section_id" type="numId" indexed="true" stored="true" required="true" multiValued="false" />
    <dynamicField name="*_id" type="string" indexed="true" stored="true" multiValued="false" />

    <!-- OJS locale support. We are using stored field for easier debugging. This can be changed
         to "false" in a production environment if index size becomes an issue. If you want to
         support an additional locale, you can add a dynamic field definition here. The locale
         names correspond 1:1 to OJS locale names. The type attribute points to one of the
         field type definitions above. -->
    <dynamicField name="*_ca" type="text_ca" indexed="true"  stored="true" multiValued="false" termVectors="true" />
    <dynamicField name="*_cs" type="text_cs" indexed="true"  stored="true" multiValued="false" termVectors="true" />
    <dynamicField name="*_da" type="text_da" indexed="true"  stored="true" multiValued="false" termVectors="true" />
    <dynamicField name="*_de" type="text_de" indexed="true"  stored="true" multiValued="false" termVectors="true" />
    <dynamicField name="*_el" type="text_el" indexed="true"  stored="true" multiValued="false" termVectors="true" />
    <dynamicField name="*_en" type="text_en" indexed="true"  stored="true" multiValued="false" termVectors="true" />
    <dynamicField name="*_es" type="text_es" indexed="true"  stored="true" multiValued="false" termVectors="true" />
    <dynamicField name="*_eu" type="text_eu" indexed="true"  stored="true" multiValued="false" termVectors="true" />
    <dynamicField name="*_fa" type="text_fa" indexed="true"  stored="true" multiValued="false" termVectors="true" />
    <dynamicField name="*_fr_CA" type="text_fr" indexed="true"  stored="true" multiValued="false" termVectors="true" />
    <dynamicField name="*_fr_FR" type="text_fr" indexed="true"  stored="true" multiValued="false" termVectors="true" />
    <dynamicField name="*_gl" type="text_gl" indexed="true"  stored="true" multiValued="false" termVectors="true" />
    <dynamicField name="*_hr" type="text" indexed="true"  stored="true" multiValued="false" termVectors="true"/> <!-- not currently supported -->
    <dynamicField name="*_it" type="text_it" indexed="true"  stored="true" multiValued="false" />
    <!--TODO: Activate<dynamicField name="*_ja_JP" type="text_cjk" indexed="true"  stored="true" multiValued="false" />-->
    <dynamicField name="*_ml" type="text" indexed="true"  stored="true" multiValued="false" termVectors="true" /> <!-- not currently supported -->
    <dynamicField name="*_nl" type="text_nl" indexed="true"  stored="true" multiValued="false" termVectors="true" />
    <dynamicField name="*_nb" type="text_no" indexed="true"  stored="true" multiValued="false" termVectors="true" />
    <dynamicField name="*_pt_BR" type="text_pt" indexed="true"  stored="true" multiValued="false" termVectors="true" />
    <dynamicField name="*_pt_PT" type="text_pt" indexed="true"  stored="true" multiValued="false" termVectors="true" />
    <dynamicField name="*_ro" type="text_ro" indexed="true"  stored="true" multiValued="false" termVectors="true" />
    <dynamicField name="*_ru" type="text_ru" indexed="true"  stored="true" multiValued="false" termVectors="true" />
    <dynamicField name="*_sr" type="text" indexed="true"  stored="true" multiValued="false" /> <!-- not currently supported -->
    <dynamicField name="*_sv" type="text_sv" indexed="true"  stored="true" multiValued="false" termVectors="true" />
    <dynamicField name="*_tr" type="text_tr" indexed="true"  stored="true" multiValued="false" termVectors="true" />
    <dynamicField name="*_uk" type="text" indexed="true"  stored="true" multiValued="false" termVectors="true" /> <!-- not currently supported -->
    <dynamicField name="*_vi" type="text" indexed="true"  stored="true" multiValued="false" termVectors="true" /> <!-- not currently supported -->
      <!--TODO: Activate<dynamicField name="*_zh_CN" type="text_cjk" indexed="true"  stored="true" multiValued="false" />-->
      <!--TODO: Activate<dynamicField name="*_zh_TW" type="text_cjk" indexed="true"  stored="true" multiValued="false" />-->
      <dynamicField name="*_txt" type="text" indexed="true" stored="true" multiValued="false" />

      <!-- Dynamic field definitions for special field types. -->
      <!-- TODO: check if it is problematic that i changed type="tdate" to type="pdate" in next field-->
    <dynamicField name="*_dt" type="pdate" indexed="true" stored="true" multiValued="false" />
    <dynamicField name="*_txtsort" type="string" indexed="true" stored="true" multiValued="false" />
    <dynamicField name="*_dtsort" type="pdate" indexed="true" stored="true" multiValued="false" />

    <!-- Spelling and auto-suggest support -->
    <dynamicField name="*_spell" type="text_spell" indexed="true" stored="true" multiValued="false" />

    <!-- Faceting support (if you have special requirements for special fields then you can add your own field types) -->
    <field name="authors_facet" type="facet_semicolon_separated" indexed="true" multiValued="false" />
    <dynamicField name="*_facet" type="facet" indexed="true" multiValued="false" />

    <!-- Ignore any fields that don't already match an existing
         field name or dynamic field (e.g. unsupported locales). -->
    <dynamicField name="*" type="ignored" multiValued="true" />

    <field name="usageMetricAll" type="externalFile" multiValued="false" />
    <field name="usageMetricMonth" type="externalFile" multiValued="false" />
  </fields>

  <!-- Field to use to determine and enforce document uniqueness.
       Unless this field is marked with required="false", it will be a required field
    -->
  <uniqueKey>submission_id</uniqueKey>

  <!-- Field for the QueryParser to use when an explicit fieldname is absent -->
  <!--Has been removed in solr 7. TODO: use the df parameter instead.<defaultSearchField>submission_id</defaultSearchField>-->
  <!-- SolrQueryParser configuration: defaultOperator="AND|OR" -->
  <!--Has been removed in solr 7. TODO: use the q.op parameter instead.<solrQueryParser defaultOperator="AND"/>-->
  </schema>
