in Lucas/src/main/java/org/apache/uima/lucas/indexer/FieldBuilder.java [80:147]
public Collection<Field> createFields(Collection<TokenStream> tokenStreams,
FieldDescription fieldDescription) throws FieldBuildingException {
TokenStream tokenStream = createFieldTokenStream(tokenStreams,
fieldDescription);
this.fieldDescription = fieldDescription;
String fieldName = fieldDescription.getName();
String delimiter = fieldDescription.getDelimiter();
Collection<Field> fields = new ArrayList<Field>();
Collection<FilterDescription> filterDescriptions = fieldDescription
.getFilterDescriptions();
tokenStream = getFilteredTokenStream(fieldName, tokenStream,
filterDescriptions);
// The unique flag means we only want ONE field instance with the
// name fieldName.
Boolean unique = fieldDescription.getUnique();
Boolean coverField = fieldDescription.getTermCoverDescription() != null;
Field.Store fieldStore = getFieldStore(fieldDescription.getStored());
Field.Index fieldIndex = getFieldIndex(fieldDescription.getIndex());
Field.TermVector fieldTermVector = getFieldTermVector(fieldDescription
.getTermVector());
boolean omitTF = fieldDescription.getIndex().equals(FIELD_INDEX_NO_TF)
|| fieldDescription.getIndex().equals(FIELD_INDEX_NO_NORMS_TF);
boolean store = fieldStore == Field.Store.YES
|| fieldStore == Field.Store.COMPRESS;
if (!coverField) {
// Create stored fields. The parameters unique, fieldIndex and
// omitTF are only necessary in case of a stored and indexed
// unique field. Then, the field is instanced stored and indexed,
// thus only one instance of the field is necessary. This only works
// with TokenStreams which contain exactly one token (if a
// TokenStream emits more tokens, several fields will be instanced).
if (store)
fields.addAll(createStoredFields(fieldName, tokenStream,
fieldStore, delimiter, unique, fieldIndex, omitTF));
// Create indexed fields. If the field is unique and has been
// stored, there already is an instance of the field and we don't
// create another.
if (fieldIndex != Field.Index.NO && (!unique || !store))
fields.add(createIndexedField(fieldName, tokenStream,
fieldIndex, fieldTermVector, omitTF));
} else {
TermCoverBuilder termCoverBuilder = termCoverBuilderFactory
.createTermCoverBuilder(tokenStream, fieldDescription.getTermCoverDescription());
while (termCoverBuilder.increaseCoverSubset()) {
String coverSubsetName = termCoverBuilder.getCoverSubsetName();
TokenStream coverSubsetTokenStream = termCoverBuilder
.getPartitionTokenStream();
if (store)
fields.addAll(createStoredFields(coverSubsetName,
coverSubsetTokenStream, fieldStore, delimiter,
unique, fieldIndex, omitTF));
if (fieldIndex != Field.Index.NO && (!unique || !store))
fields.add(createIndexedField(coverSubsetName,
coverSubsetTokenStream, fieldIndex, fieldTermVector,
omitTF));
}
}
return fields;
}