[ https://issues.apache.org/jira/browse/LUCENE-3312?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13398446#comment-13398446 ]
Nikola Tankovic commented on LUCENE-3312: ----------------------------------------- I think this is now OK, I'll put in util.* {code} public Iterator<StorableField> storedFieldsIterator() { return new FilterIterator<StorableField, Field>(fields.iterator()) { @Override protected boolean predicateFunction(Field field) { return field.type.stored(); } }; } public Iterator<IndexableField> indexedFieldsIterator() { return new FilterIterator<IndexableField, Field>(fields.iterator()) { @Override protected boolean predicateFunction(Field field) { return field.type.indexed(); } }; } private abstract class FilterIterator<T, U extends T> implements Iterator<T> { private Iterator<U> iterator; private T next = null; private boolean nextIsSet = false; protected abstract boolean predicateFunction(U field); public FilterIterator(Iterator<U> baseIterator) { this.iterator = baseIterator; } public boolean hasNext() { if (nextIsSet) { return true; } else { return setNext(); } } public T next() { if (!nextIsSet) { if (!setNext()) { throw new NoSuchElementException(); } } nextIsSet = false; return next; } public void remove() { throw new UnsupportedOperationException(); } private boolean setNext() { while (iterator.hasNext()) { U object = iterator.next(); if (predicateFunction(object)) { next = object; nextIsSet = true; return true; } } return false; } } {code} > Break out StorableField from IndexableField > ------------------------------------------- > > Key: LUCENE-3312 > URL: https://issues.apache.org/jira/browse/LUCENE-3312 > Project: Lucene - Java > Issue Type: Improvement > Components: core/index > Reporter: Michael McCandless > Assignee: Nikola Tankovic > Labels: gsoc2012, lucene-gsoc-12 > Fix For: Field Type branch > > Attachments: lucene-3312-patch-01.patch, lucene-3312-patch-02.patch, > lucene-3312-patch-03.patch, lucene-3312-patch-04.patch, > lucene-3312-patch-05.patch > > > In the field type branch we have strongly decoupled > Document/Field/FieldType impl from the indexer, by having only a > narrow API (IndexableField) passed to IndexWriter. This frees apps up > use their own "documents" instead of the "user-space" impls we provide > in oal.document. > Similarly, with LUCENE-3309, we've done the same thing on the > doc/field retrieval side (from IndexReader), with the > StoredFieldsVisitor. > But, maybe we should break out StorableField from IndexableField, > such that when you index a doc you provide two Iterables -- one for the > IndexableFields and one for the StorableFields. Either can be null. > One downside is possible perf hit for fields that are both indexed & > stored (ie, we visit them twice, lookup their name in a hash twice, > etc.). But the upside is a cleaner separation of concerns in API.... -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org