I like merging these iterators but the API still feels a bit weird to me (the field() part in particular). I wish we could reuse Fields/Terms but it doesn't look possible given that fields are not known in advance. So I think we should commit this patch. The FieldTermIterator.field() documentation says that it will return
if iteration is finished, should we rather say that the behaviour of this method is unspecified after iteration is finished?