: I don't think it's useful to somehow programmatically access the list
: of fields that a fieldType could output.

based on my understanding of the potential types of use cases we're 
talking about, i think i agree with you.  It seems like the most crucial 
aspect is that a FieldType has a way of producing multiple 
o.a.l.document.Field instances (potentially with different field names) 
from a single String input at index time.  this can be done with something 
like the API that Grant mentioned earlier.

For anything except non-trivial use cases, any code (like a query parser) 
attempting to deal with this fields is going to need to be very special 
purpose and have direct knowledge of the code in the FieldType.  if a 
"CartesienGeoSearchQParser" is asked to parse 
"store_location:89.3,45.4~5miles" it can throw a parse exception if 
IndexSchema.getFieldType("store_location") isn't an instanceof 
"CartesianGeoSearchFieldType" -- assuming it is: it can cast it and call 
CartesianGeoSearchFieldType specific methods to find out everything it 
needs to know about what multitudes of field names that specific instance 
produced based on it's configuration.  (side thought: we may want to add a 
"getFieldTypesByClass" method to the IndexSchema so QParsers and 
SearchComponents can get lists of fields matching special cases they want 
to know about -- but that's a secondary concern)

One thing that concerns me is potential field name collision -- where one 
of these new multifield producing FieldTypes might want to creat a name 
that happens to collide with a field the user has already declared.  

Using Double underscores kind of feels like a hack, what i keep wondering 
is if we can't leverage dynamicFields here.  if we require that these 
FieldTypes be declared using <dynamicField> delcarations (they could error 
on init otherwise) then the wildcard nature of the name tells the 
FieldType where it's allowed to add things to the pattern to make unique 
field names in the index -- and they can still be used as true dynamic 
fields, as long as they always add to the field name given to them. 
something like...

   <dynamicField name="location*" type="geo1" />

can be use to index a single "location" field (internal construction 
"location_lat" and "location_lon" or it could be used to support a 
"location_start" and "location_end" field (using 
location_start_lat+location_start_lon and 
location_end_lat+location_end_lon)



-Hoss

Reply via email to