package org.apache.solr.schema; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.lucene.search.SortField; public class EmbeddedIndexedIntField extends IntField { int fieldNumber = 0; Map<String,Integer> strToIntMap = new HashMap<String,Integer>(); protected void init(IndexSchema schema, Map<String, String> args) { super.init(schema, args); fieldNumber = Integer.parseInt(args.remove("fieldNumber")); Iterator<String> itr = args.keySet().iterator(); List<String> keysToDelete = new ArrayList<String>(); while(itr.hasNext()){ String key = itr.next(); String value = args.get(key); try { if(key.indexOf("type_") == 0){ keysToDelete.add(key); key = key.substring(5); int intKey = Integer.parseInt(key); strToIntMap.put(value, intKey); } } catch (NumberFormatException e){ } } for(String key: keysToDelete){ args.remove(key); } } public SortField getSortField(SchemaField field, boolean reverse) { return new EmbeddedSortField(field.getName(), SortField.INT, reverse, fieldNumber); } public int getFieldNumber(){ return this.fieldNumber; } public int getStringToInt(String term){ // parsing out actual data from term String val = term.substring(term.indexOf(":") + 1); try { int ret = Integer.parseInt(val); return ret; } catch(NumberFormatException e){ // incase data is not integer, try to see if there is any string to integer mapping defined // from schema fieldType if(strToIntMap.containsKey(term)){ return strToIntMap.get(term); } } return -1; } }