<?xml version="1.0" encoding="utf-8" ?>
<schema name="superheroes" version="1.0">
<types>
  <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/> 
  <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true" omitNorms="true"/>
  <fieldType name="integer" class="solr.IntField" omitNorms="true"/>
  <fieldType name="long" class="solr.LongField" omitNorms="true"/>
  <fieldType name="float" class="solr.FloatField" omitNorms="true"/>
  <fieldType name="double" class="solr.DoubleField" omitNorms="true"/>
  <fieldType name="sint" class="solr.SortableIntField" sortMissingLast="true" omitNorms="true"/>
  <fieldType name="slong" class="solr.SortableLongField" sortMissingLast="true" omitNorms="true"/>
  <fieldType name="sfloat" class="solr.SortableFloatField" sortMissingLast="true" omitNorms="true"/>
  <fieldType name="sdouble" class="solr.SortableDoubleField" sortMissingLast="true" omitNorms="true"/>
  <fieldType name="date" class="solr.DateField" sortMissingLast="true" omitNorms="true"/>
  
  <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
	  <analyzer>
		 <tokenizer class="solr.WhitespaceTokenizerFactory"/>
	  </analyzer>
  </fieldType>
  
	<fieldType name="textSpell" class="solr.TextField" positionIncrementGap="100" >
	  <analyzer>
	    <tokenizer class="solr.StandardTokenizerFactory"/>
	    <filter class="solr.LowerCaseFilterFactory"/>
	    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
	  </analyzer>
	</fieldType>

  
  <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
	  <analyzer type="index">
		  <tokenizer class="solr.StandardTokenizerFactory"/>
		  <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
		  <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
		  <filter class="solr.LowerCaseFilterFactory"/>
		  <filter class="solr.EnglishPorterFilterFactory"/>
	  </analyzer>
	  <analyzer type="query">
		  <tokenizer class="solr.StandardTokenizerFactory"/>
		  <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
		  <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
		  <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0"/>
		  <filter class="solr.LowerCaseFilterFactory"/>
		  <filter class="solr.EnglishPorterFilterFactory"/>
	  </analyzer>
  </fieldType>
  
  <fieldType name="textTight" class="solr.TextField" positionIncrementGap="100" >
	  <analyzer>
		  <tokenizer class="solr.WhitespaceTokenizerFactory"/>
		  <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
		  <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
		  <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
		  <filter class="solr.LowerCaseFilterFactory"/>
		  <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
		  <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
	  </analyzer>
  </fieldType>
  
  <fieldType name="alphaOnlySort" class="solr.TextField" sortMissingLast="true" omitNorms="true">
	  <analyzer>
		  <tokenizer class="solr.KeywordTokenizerFactory"/>
		  <filter class="solr.LowerCaseFilterFactory" />
		  <filter class="solr.TrimFilterFactory" />
		  <filter class="solr.PatternReplaceFilterFactory"
			pattern="([^a-z])" replacement="" replace="all"
		  />
	  </analyzer>
  </fieldType>
  
  <fieldtype name="ignored" stored="false" indexed="false" 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
   compressed: [false] if this field should be stored using gzip compression
   (this will only apply if the field type is compressable; among
   the standard field types, only TextField and StrField are)
   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.
   -->

   <field name="id" type="string" indexed="true" stored="true" required="true" /> 
   <field name="name" type="text" indexed="true" stored="true" required="true" />   
   <field name="supername" type="string" indexed="true" stored="true" required="true" />   
   <field name="powers" type="text" indexed="true" stored="true" multiValued="true" required="false" />
   <field name="story" type="text" indexed="true" stored="true" required="true"/>
   
   <field name="comment" type="text" indexed="true" stored="true" required="false"/>
   
   <field name="spell" type="textSpell" indexed="true" stored="false" multiValued="true"/>
   <field name="textSearch" type="text" indexed="true" stored="false" multiValued="true"/>
   
   

	<copyField source="name" dest="textSearch"/>
	<copyField source="powers" dest="textSearch"/>
	
	<copyField source="name" dest="spell"/>
	<copyField source="powers" dest="spell"/>
	<copyField source="story" dest="spell"/>
</fields>	
<uniqueKey>id</uniqueKey>

<defaultSearchField>textSearch</defaultSearchField>

<solrQueryParser defaultOperator="OR" />
</schema>
