<?xml version="1.0" encoding="UTF-8" ?>
<!--
  Copyright 2022-2022, RONDHUIT Co.,LTD.
-->
<schema name="example" version="1.6">
  <field name="_version_" type="plong" indexed="false" stored="false"/>
  <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false"/>
  <field name="category" type="string" indexed="true" stored="true" multiValued="false"/>
  <field name="name" type="text_ja" indexed="true" stored="true"/>
  <field name="name_2g" type="text_2g" indexed="true" stored="true"/>
  <field name="name_forward" type="text_forward" indexed="true" stored="true"/>
  <field name="name_backward" type="text_backward" indexed="true" stored="true"/>
  <field name="hierarchy" type="pathhie" indexed="true" stored="true" omitNorms="true" multiValued="false"/>
  <field name="address" type="text_ja" indexed="true" stored="true"/>
  <field name="address_2g" type="text_2g" indexed="true" stored="true"/>
  <field name="location" type="location" indexed="true" stored="true" multiValued="false"/>

  <dynamicField name="*_i"  type="pint"    indexed="true"  stored="true"/>
  <dynamicField name="*_is" type="pint"    indexed="true"  stored="true"  multiValued="true"/>
  <dynamicField name="*_s"  type="string"  indexed="true"  stored="true" />
  <dynamicField name="*_s_ns"  type="string"  indexed="true"  stored="false" />
  <dynamicField name="*_ss" type="string"  indexed="true"  stored="true" multiValued="true"/>
  <dynamicField name="*_l"  type="plong"   indexed="true"  stored="true"/>
  <dynamicField name="*_l_ns"  type="plong"   indexed="true"  stored="false"/>
  <dynamicField name="*_ls" type="plong"   indexed="true"  stored="true"  multiValued="true"/>
  <dynamicField name="*_b"  type="boolean" indexed="true" stored="true"/>
  <dynamicField name="*_bs" type="boolean" indexed="true" stored="true"  multiValued="true"/>
  <dynamicField name="*_f"  type="pfloat"  indexed="true"  stored="true"/>
  <dynamicField name="*_fs" type="pfloat"  indexed="true"  stored="true"  multiValued="true"/>
  <dynamicField name="*_d"  type="pdouble" indexed="true"  stored="true"/>
  <dynamicField name="*_ds" type="pdouble" indexed="true"  stored="true"  multiValued="true"/>
  <dynamicField name="*_dt"  type="pdate"    indexed="true"  stored="true"/>
  <dynamicField name="*_dts" type="pdate"    indexed="true"  stored="true" multiValued="true"/>
  <dynamicField name="*_p"  type="location" indexed="true" stored="true"/>
  <dynamicField name="ignored_*" type="ignored" multiValued="true"/>
  <dynamicField name="random_*" type="random" />

  <uniqueKey>id</uniqueKey>

  <copyField source="name" dest="name_2g"/>
  <copyField source="name" dest="name_forward"/>
  <copyField source="name" dest="name_backward"/>
  <copyField source="address" dest="address_2g"/>

  <fieldType name="string" class="solr.StrField" sortMissingLast="true" />
  <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>
  <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="pdate" class="solr.DatePointField" docValues="true"/>
  <fieldType name="binary" class="solr.BinaryField"/>
  <fieldType name="random" class="solr.RandomSortField" indexed="true" />
  <fieldType name="location" class="solr.LatLonPointSpatialField" docValues="true"/>
  <fieldType name="ignored" stored="false" indexed="false" multiValued="true" class="solr.StrField" />

  <fieldType name="pathhie" class="solr.TextField">
    <analyzer type="index">
      <tokenizer name="pathHierarchy" delimiter="/"/>
    </analyzer>
    <analyzer type="query">
      <tokenizer name="keyword"/>
    </analyzer>
  </fieldType>

  <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
      <tokenizer name="whitespace"/>
    </analyzer>
  </fieldType>

  <fieldType name="text_forward" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
      <tokenizer name="edgeNGram" minGramSize="1" maxGramSize="100"/>
      <filter name="lowercase"/>
    </analyzer>
    <analyzer type="query">
      <tokenizer name="keyword"/>
      <filter name="lowercase"/>
    </analyzer>
  </fieldType>

  <fieldType name="text_backward" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
      <tokenizer name="keyword"/>
      <filter name="reverseString"/>
      <filter name="lowercase"/>
      <filter name="edgeNGram" minGramSize="1" maxGramSize="100"/>
    </analyzer>
    <analyzer type="query">
      <tokenizer name="keyword"/>
      <filter name="reverseString"/>
      <filter name="lowercase"/>
    </analyzer>
  </fieldType>

  <fieldType name="text_2g" class="solr.TextField" autoGeneratePhraseQueries="true" positionIncrementGap="100">
    <analyzer type="index">
      <charFilter name="mapping" mapping="mapping-kana.txt"/>
      <tokenizer name="nGram" maxGramSize="2" minGramSize="2"/>
      <filter name="lowercase"/>
    </analyzer>
    <analyzer type="query">
      <charFilter name="mapping" mapping="mapping-kana.txt"/>
      <tokenizer name="nGram" maxGramSize="2" minGramSize="2"/>
      <filter name="managedSynonymGraph" managed="synonym-2g"/>
      <filter name="lowercase"/>
    </analyzer>
  </fieldType>

  <fieldType name="text_ja" class="solr.TextField" autoGeneratePhraseQueries="true" positionIncrementGap="100">
    <analyzer type="index">
      <charFilter name="mapping" mapping="mapping-kana.txt"/>
      <tokenizer name="japanese" mode="normal"/>
      <filter name="japaneseKatakanaStem" minimumLength="4"/>
      <filter name="lowercase"/>
    </analyzer>
    <analyzer type="query">
      <charFilter name="mapping" mapping="mapping-kana.txt"/>
      <tokenizer name="japanese" mode="normal"/>
      <filter name="japaneseKatakanaStem" minimumLength="4"/>
      <filter name="managedSynonymGraph" managed="synonym-ja"/>
      <filter name="lowercase"/>
    </analyzer>
  </fieldType>

  <fieldType name="text_ng" class="solr.TextField" autoGeneratePhraseQueries="true" positionIncrementGap="100">
    <analyzer>
      <tokenizer name="nGram"/>
      <filter name="lowercase"/>
    </analyzer>
  </fieldType>

  <fieldType name="text_kwd" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
      <tokenizer name="keyword"/>
      <filter name="lowercase"/>
    </analyzer>
  </fieldType>

  <fieldType name="suggest_ja" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
      <tokenizer name="japanese" mode="normal"/>
      <filter name="cjkWidth"/>
      <filter name="japaneseReadingForm" useRomaji="true"/>
      <filter name="shingle" minShingleSize="2" maxShingleSize="99"
              outputUnigrams="false" outputUnigramsIfNoShingles="true" tokenSeparator=""/>
      <filter name="lowercase"/>
    </analyzer>
  </fieldType>

<!-- depends on RCSS
  <fieldType name="suggest_ja_rcss" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
      <charFilter name="mapping" mapping="mapping-kana.txt"/>
      <tokenizer name="japanese" mode="normal"/>
      <filter class="com.rondhuit.solr.analysis.JaSuggestFilterFactory" concatKanjiToken="false" matchExactKanji="true" />
      <filter name="lowercase"/>
    </analyzer>
  </fieldType>
-->

</schema>
