Schema changes:
You will need to define a new field type in your solr schema file and then you can create fields of that type. Example schema snippet:
<!-- Source: solr/example/.../conf/schema.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<schema name="adam" version="1.3">
<types>
...
<fieldType name="rank_t" class="org.apache.solr.schema.ext.RankFieldType"/>
</types>
<fields>
...
<field name="rank" type="rank_t" indexed="true" stored="true"/>
</fields>
...
</schema>
Java class for custom field type:
// Source: src/java/org/apache/solr/schema/ext/RankFieldType.java
package org.apache.solr.schema.ext;
import java.io.IOException;
import org.apache.lucene.document.Fieldable;
import org.apache.lucene.search.SortField;
import org.apache.solr.response.TextResponseWriter;
import org.apache.solr.schema.FieldType;
import org.apache.solr.schema.SchemaField;
import org.apache.solr.search.ext.RankFieldComparatorSource;
public class RankFieldType extends FieldType {
@Override
public SortField getSortField(SchemaField field, boolean top) {
return new SortField(field.getName(), new RankFieldComparatorSource(), top);
}
@Override
// copied verbatim from GeoHashField method
public void write(TextResponseWriter writer, String name, Fieldable f) throws IOException {
writer.writeStr(name, f.stringValue(), false);
}
}