public void inform(IndexSchema schema) { FieldType doubleType = schema.getFieldTypeByName(doubleFieldName); if (doubleType == null) { throw new RuntimeException("Can not find double: " + doubleFieldName); } if (!(doubleType instanceof TrieDoubleField)) { throw new RuntimeException("double must be TrieDoubleField: " + doubleType); } // Just set these, delegate everything else to the field type int p = (INDEXED | TOKENIZED | OMIT_NORMS | OMIT_TF_POSITIONS); List<SchemaField> fields = new ArrayList<SchemaField>(schema.getFields().values()); for (SchemaField sf : fields) { if (sf.getType() == this) { String name = sf.getName(); schema .getFields() .put( name + TwoDoublesFieldInfo.SUFFIX_X, new SchemaField(name + TwoDoublesFieldInfo.SUFFIX_X, doubleType, p, null)); schema .getFields() .put( name + TwoDoublesFieldInfo.SUFFIX_Y, new SchemaField(name + TwoDoublesFieldInfo.SUFFIX_Y, doubleType, p, null)); } } TrieField df = (TrieField) doubleType; NumericFieldInfo info = new NumericFieldInfo(); info.setPrecisionStep(df.getPrecisionStep()); info.store = true; // TODO properties &... spatialStrategy = new TwoDoublesStrategy(ctx, info, FieldCache.NUMERIC_UTILS_DOUBLE_PARSER); spatialStrategy.setIgnoreIncompatibleGeometry(ignoreIncompatibleGeometry); }