Jul 17, 2011

Add custom field to sunspot

In schema.xml, we add certain tags:


<types>
<fieldType name="autosuggest" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.LetterTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="1" maxGramSize="25" />
<filter class="solr.ThaiWordFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.LetterTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
</types>

<fields>
<dynamicField name="*_as" type="autocomplete" indexed="true" multiValued="true" stored="false"/>
<dynamicField name="*_ass" type="autocomplete" indexed="true" multiValued="true" stored="true"/>
</fields>


Please note that *_ac is for non-stored field and *_acs is for stored fields. It's just how Sunspot stores fields and we have to follow the convention.

And then in Sunspot's model, we would like to force it to use the new field:

class Tag
.
.
.

include Sunspot::Mongoid
searchable do
text :name, :as => :name_ac

end

end