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

<!--
 This is the Solr schema file. This file should be named "schema.xml" and
 should be in the conf directory under the solr home
 (i.e. ./solr/conf/schema.xml by default)
 or located where the classloader for the Solr webapp can find it.

 This example schema is the recommended starting point for users.
 It should be kept correct and concise, usable out-of-the-box.

 For more information, on how to customize this file, please see
 http://wiki.apache.org/solr/SchemaXml
-->

<schema name="example" version="1.2">
  <!-- attribute "name" is the name of this schema and is only used for display purposes.
       Applications should change this to reflect the nature of the search collection.
       version="1.1" is Solr's version number for the schema syntax and semantics.  It should
       not normally be changed by applications.
       1.0: multiValued attribute did not exist, all fields are multiValued by nature
       1.1: multiValued attribute introduced, false by default -->

  <!-- field type definitions. The "name" attribute is
     just a label to be used by field definitions.  The "class"
     attribute and any other attributes determine the real
     behavior of the fieldType.
       Class names starting with "solr" refer to java classes in the
     org.apache.solr.analysis package.
  -->

  <!-- The StrField type is not analyzed, but indexed/stored verbatim.
     - StrField and TextField support an optional compressThreshold which
     limits compression (if enabled in the derived fields) to values which
     exceed a certain size (in characters).
  -->
  <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>

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

  <!-- The optional sortMissingLast and sortMissingFirst attributes are
       currently supported on types that are sorted internally as strings.
     - If sortMissingLast="true", then a sort on this field will cause documents
       without the field to come after documents with the field,
       regardless of the requested sort order (asc or desc).
     - If sortMissingFirst="true", then a sort on this field will cause documents
       without the field to come before documents with the field,
       regardless of the requested sort order.
     - If sortMissingLast="false" and sortMissingFirst="false" (the default),
       then default lucene sorting will be used which places docs without the
       field first in an ascending sort and last in a descending sort.
  -->

  <fieldType name="int" class="${solr.tests.IntegerFieldType}" docValues="${solr.tests.numeric.dv}" precisionStep="0" omitNorms="true" positionIncrementGap="0"/>
  <fieldType name="float" class="${solr.tests.FloatFieldType}" docValues="${solr.tests.numeric.dv}" precisionStep="0" omitNorms="true" positionIncrementGap="0"/>
  <fieldType name="long" class="${solr.tests.LongFieldType}" docValues="${solr.tests.numeric.dv}" precisionStep="0" omitNorms="true" positionIncrementGap="0"/>
  <fieldType name="double" class="${solr.tests.DoubleFieldType}" docValues="${solr.tests.numeric.dv}" precisionStep="0" omitNorms="true" positionIncrementGap="0"/>

  <fieldType name="tint" class="${solr.tests.IntegerFieldType}" docValues="${solr.tests.numeric.dv}" omitNorms="true" positionIncrementGap="0" indexed="true"
             stored="false"/>
  <fieldType name="tfloat" class="${solr.tests.FloatFieldType}" docValues="${solr.tests.numeric.dv}" omitNorms="true" positionIncrementGap="0" indexed="true"
             stored="false"/>
  <fieldType name="tlong" class="${solr.tests.LongFieldType}" docValues="${solr.tests.numeric.dv}" omitNorms="true" positionIncrementGap="0" indexed="true"
             stored="false"/>
  <fieldType name="tdouble" class="${solr.tests.DoubleFieldType}" docValues="${solr.tests.numeric.dv}" omitNorms="true" positionIncrementGap="0" indexed="true"
             stored="false"/>

  <fieldType name="tdouble4" class="${solr.tests.DoubleFieldType}" docValues="${solr.tests.numeric.dv}" precisionStep="4" omitNorms="true"
             positionIncrementGap="0" indexed="true" stored="false"/>

  <fieldType name="tdate" class="${solr.tests.DateFieldType}" docValues="${solr.tests.numeric.dv}" omitNorms="true" positionIncrementGap="0" indexed="true"
             stored="false"/>


  <!-- The format for this date field is of the form 1995-12-31T23:59:59Z, and
       is a more restricted form of the canonical representation of dateTime
       http://www.w3.org/TR/xmlschema-2/#dateTime
       The trailing "Z" designates UTC time and is mandatory.
       Optional fractional seconds are allowed: 1995-12-31T23:59:59.999Z
       All other components are mandatory.

       Expressions can also be used to denote calculations that should be
       performed relative to "NOW" to determine the value, ie...

             NOW/HOUR
                ... Round to the start of the current hour
             NOW-1DAY
                ... Exactly 1 day prior to now
             NOW/DAY+6MONTHS+3DAYS
                ... 6 months and 3 days in the future from the start of
                    the current day

       Consult the TrieDateField javadocs for more information.
    -->
  <fieldType name="date" class="${solr.tests.DateFieldType}" docValues="${solr.tests.numeric.dv}" sortMissingLast="true" omitNorms="true"/>


  <!-- The "RandomSortField" is not used to store or search any
       data.  You can declare fields of this type it in your schema
       to generate psuedo-random orderings of your docs for sorting
       purposes.  The ordering is generated based on the field name
       and the version of the index, As long as the index version
       remains unchanged, and the same field name is reused,
       the ordering of the docs will be consistent.
       If you want differend psuedo-random orderings of documents,
       for the same version of the index, use a dynamicField and
       change the name
   -->
  <fieldType name="random" class="solr.RandomSortField" indexed="true"/>

  <!-- solr.TextField allows the specification of custom text analyzers
       specified as a tokenizer and a list of token filters. Different
       analyzers may be specified for indexing and querying.

       The optional positionIncrementGap puts space between multiple fields of
       this type on the same document, with the purpose of preventing false phrase
       matching across fields.

       For more info on customizing your analyzer chain, please see
       http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters
   -->

  <!-- One can also specify an existing Analyzer class that has a
       default constructor via the class attribute on the analyzer element
  <fieldType name="text_greek" class="solr.TextField">
    <analyzer class="org.apache.lucene.analysis.el.GreekAnalyzer"/>
  </fieldType>
  -->

  <!-- A text field that only splits on whitespace for exact matching of words -->
  <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
      <tokenizer class="solr.MockTokenizerFactory"/>
    </analyzer>
  </fieldType>

  <!-- A text field that uses WordDelimiterGraphFilter to enable splitting and matching of
      words on case-change, alpha numeric boundaries, and non-alphanumeric chars,
      so that a query of "wifi" or "wi fi" could match a document containing "Wi-Fi".
      Synonyms and stopwords are customized by external files, and stemming is enabled.
      Duplicate tokens at the same position (which may result from Stemmed Synonyms or
      WordDelim parts) are removed.
      -->
  <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
      <tokenizer class="solr.MockTokenizerFactory"/>
      <!-- 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.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
      <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1"
              catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
      <filter class="solr.PorterStemFilterFactory"/>
      <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
      <filter class="solr.FlattenGraphFilterFactory"/>
    </analyzer>
    <analyzer type="query">
      <tokenizer class="solr.MockTokenizerFactory"/>
      <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
      <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
      <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0"
              catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
      <filter class="solr.PorterStemFilterFactory"/>
      <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
    </analyzer>
  </fieldType>


  <!-- Less flexible matching, but less false matches.  Probably not ideal for product names,
       but may be good for SKUs.  Can insert dashes in the wrong place and still match. -->
  <fieldType name="textTight" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
      <tokenizer class="solr.MockTokenizerFactory"/>
      <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
      <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
      <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1"
              catenateNumbers="1" catenateAll="0"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
      <filter class="solr.EnglishMinimalStemFilterFactory"/>
      <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
      <filter class="solr.FlattenGraphFilterFactory"/>
    </analyzer>
    <analyzer type="query">
      <tokenizer class="solr.MockTokenizerFactory"/>
      <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
      <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
      <filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1"
              catenateNumbers="1" catenateAll="0"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
      <filter class="solr.EnglishMinimalStemFilterFactory"/>
      <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
    </analyzer>
  </fieldType>

  <!-- This is an example of using the KeywordTokenizer along
       With various TokenFilterFactories to produce a sortable field
       that does not include some properties of the source text
    -->
  <fieldType name="alphaOnlySort" class="solr.TextField" sortMissingLast="true" omitNorms="true">
    <analyzer>
      <!-- KeywordTokenizer does no actual tokenizing, so the entire
           input string is preserved as a single token
        -->
      <tokenizer class="solr.MockTokenizerFactory" pattern="keyword"/>
      <!-- The LowerCase TokenFilter does what you expect, which can be
           when you want your sorting to be case insensitive
        -->
      <filter class="solr.LowerCaseFilterFactory"/>
      <!-- The TrimFilter removes any leading or trailing whitespace -->
      <filter class="solr.TrimFilterFactory"/>
      <!-- The PatternReplaceFilter gives you the flexibility to use
           Java Regular expression to replace any sequence of characters
           matching a pattern with an arbitrary replacement string,
           which may include back refrences to portions of the orriginal
           string matched by the pattern.

           See the Java Regular Expression documentation for more
           infomation on pattern and replacement string syntax.

           http://docs.oracle.com/javase/8/docs/api/java/util/regex/package-summary.html
        -->
      <filter class="solr.PatternReplaceFilterFactory"
              pattern="([^a-z])" replacement="" replace="all"
      />
    </analyzer>
  </fieldType>

  <!-- since fields of this type are by default not stored or indexed, any data added to
       them will be ignored outright
   -->
  <fieldType name="ignored" stored="false" indexed="false" class="solr.StrField"/>

  <fieldType name="file" keyField="id" defVal="1" stored="false" indexed="false" class="solr.ExternalFileField" />

  <!-- Valid attributes for fields:
    name: mandatory - the name for the field
    type: mandatory - the name of a previously defined type from the <fieldType>s
    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.
  -->

  <!-- for testing, a type that does a transform to see if it's correctly done everywhere -->
  <field name="id" type="string" indexed="true" stored="true" required="true"/>
  <field name="text" type="text" indexed="true" stored="false"/>
  <field name="signatureField" type="string" indexed="true" stored="false"/>

  <field name="tint" type="tint" indexed="true" stored="true"/>
  <field name="tfloat" type="tfloat" indexed="true" stored="true"/>
  <field name="tlong" type="tlong" indexed="true" stored="true"/>
  <field name="tdouble" type="tdouble" indexed="true" stored="true"/>

  <field name="tdouble4" type="tdouble4" indexed="true" stored="false"/>

  <field name="tdate" type="tdate" indexed="true" stored="true"/>

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

  <!-- Dynamic field definitions.  If a field name is not found, dynamicFields
       will be used if the name matches any of the patterns.
       RESTRICTION: the glob-like pattern in the name attribute must have
       a "*" only at the start or the end.
       EXAMPLE:  name="*_i" will match any field ending in _i (like myid_i, z_i)
       Longer patterns will be matched first.  if equal size patterns
       both match, the first appearing in the schema will be used.  -->
  <dynamicField name="*_s" type="string" indexed="true" stored="true"/>
  <dynamicField name="*_ss" type="string" indexed="true" stored="true" multiValued="true"/>
  <dynamicField name="*_sS" type="string" indexed="false" stored="true"/>
  <dynamicField name="*_i" type="tint" indexed="true" stored="true"/>
  <dynamicField name="*_l" type="tlong" indexed="true" stored="true"/>
  <dynamicField name="*_f" type="tfloat" indexed="true" stored="true"/>
  <dynamicField name="*_d" type="tdouble" indexed="true" stored="true"/>

  <dynamicField name="*_t" type="text" indexed="true" stored="true"/>
  <dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>
  <dynamicField name="*_dt" type="date" indexed="true" stored="true"/>
  <dynamicField name="*_ws" type="text_ws" indexed="true" stored="true"/>

  <dynamicField name="*_extf" type="file"/>

  <dynamicField name="*_random" type="random"/>

  <!-- uncomment the following to ignore any fields that don't already match an existing
       field name or dynamic field, rather than reporting them as an error.
       alternately, change the type="ignored" to some other type e.g. "text" if you want
       unknown fields indexed and/or stored by default -->
  <!--dynamicField name="*" type="ignored" /-->


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