Wanted to share this, as I've seen a couple discussions on different boards. The solution has been either:
1. use the solrj client 2. import as csv 3. use the streamingupdatesolrserver The barrier I have is that I need to build this offline (without using a solr server, solrconfig.xml, or schema.xml), instead using the solr java classes to create the fields in a Lucene index. And, the Solr API for FieldType doesn't seem to expose enough to allow this. To get done what I needed, I created a class under the package org.apache.solr.schema (in my own jar). There is probably a better way to get this done, but I just needed to explicitly create TrieDateFields, and this got it done. Sharing, if this helps someone in the same situation. Or, if someone has got a better approach, I'd most appreciate it. Thanks, -Craig <code> package org.apache.solr.schema; import java.util.Map; import java.io.ByteArrayInputStream; import java.io.IOException; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import javax.xml.parsers.ParserConfigurationException; import org.apache.lucene.document.Field; import org.apache.solr.core.SolrConfig; public class MY_SolrField { // bit values for boolean field properties. final public static int INDEXED = FieldProperties.INDEXED; final public static int TOKENIZED = FieldProperties.TOKENIZED; final public static int STORED = FieldProperties.STORED; final public static int BINARY = FieldProperties.BINARY; final public static int OMIT_NORMS = FieldProperties.OMIT_NORMS; final public static int OMIT_TF_POSITIONS = FieldProperties.OMIT_TF_POSITIONS; final public static int STORE_TERMVECTORS = FieldProperties.STORE_TERMVECTORS; final public static int STORE_TERMPOSITIONS = FieldProperties.STORE_TERMPOSITIONS; final public static int STORE_TERMOFFSETS = FieldProperties.STORE_TERMOFFSETS; private FieldType ft = null; private SchemaField sf = null; public MY_SolrField(String fieldname, FieldType fieldtype, int properties, Map<String,String> args, String defaultValue) { ft = fieldtype; init(args); sf = new SchemaField(fieldname, ft, properties, defaultValue); } private void init(Map<String,String> args) { IndexSchema ischema = null; try { String configMin = "<?xml version=\"1.0\" ?><config name=\"min\"/>"; ByteArrayInputStream bisc = new ByteArrayInputStream(configMin.getBytes()); InputSource isc = new InputSource(bisc); SolrConfig sconfig = new SolrConfig("x", isc); String schemaMin = "<?xml version=\"1.0\" ?><schema name=\"min\" version=\"1.2\"/>"; ByteArrayInputStream biss = new ByteArrayInputStream(schemaMin.getBytes()); InputSource iss = new InputSource(biss); ischema = new IndexSchema(sconfig, "x", iss); } catch (ParserConfigurationException epc) { epc.printStackTrace(System.out); } catch (SAXException epc) { epc.printStackTrace(System.out); } catch (IOException eio) { eio.printStackTrace(System.out); } ft.setArgs(ischema, args); } public Field createField(String fieldval, float boost) { Field field = ft.createField(sf, fieldval, boost); return (field); } } </code> And to create a TrieDateField <code> String name = "changed"; TrieDateField tdate = new TrieDateField(); int properties = (MY_SolrField.INDEXED | MY_SolrField.TOKENIZED | MY_SolrField.STORED | MY_SolrField.OMIT_NORMS | MY_SolrField.STORE_TERMVECTORS); Map<String,String> myargs = new HashMap<String,String>(); myargs.put("precisionStep", "6"); myargs.put("positionIncrementGap", "0"); String defaultValue = "1970-01-01T00:00:00Z"; MY_SolrField myfield = new MY_SolrField(name, tdate, properties, myargs, defaultValue); Field field = myfield.createField("2011-04-18T18:30:00Z", 0); doc.add(field); </code>