[ 
https://issues.apache.org/jira/browse/LUCENE-1849?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12747039#action_12747039
 ] 

Tim Smith commented on LUCENE-1849:
-----------------------------------

bq. I think this will get pretty messy and complicated.

yeah, this is a bit messy with the chain of inheritance in these classes (as 
each variant is "slightly" optimized depending on in order/out of order 
collection)

makes me go back to favoring InOrderCollector/OutOfOrderCollector abstract 
classes
or maybe just one "AbstractCollector" method which implements all methods 
except collect()

like so:
{code}
public abstract class AbstractCollector extends Collector {
  private final boolean allowDocsOutOfOrder;
  protected IndexReader reader;
  protected Scorer scorer;
  protected int docBase;  

  public AbstractCollector() {
    this(false);
  }

  public AbstractCollector(boolean allowDocsOutOfOrder) {
    this.allowDocsOutOfOrder = allowDocsOutOfOrder;
  }

  public void setNextReader(IndexReader reader, int docBase) {
    this.reader = reader;
    this.docBase = docBase;
  }

  public void setScorer(Scorer scorer) {
    this.scorer = scorer;
  }

  public final boolean acceptsDocsOutOfOrder() {
    return allowDocsOutOfOrder;
  }
}
{code}

bq. What exactly are we trying to solve here?
the Collector methodology has grown more complicated (because it does more to 
handle per segment searches)
the HitCollector api was nice and simple

this AbstractCollector (insert better name here) gets things back to being more 
simple
could even hide the "Scorer" as private and provide a "score()" method that 
returns the score for the current document, and otherwise simplify this even 
more

subclassing AbstractCollector instead of Collector makes it so most of the 
"required common things" are done for you
otherwise, every single Collector will do virtually the same thing is done in 
AbstractCollector here (as far as setup/etc)

Again, this is just a _Wish_ which i've thought of as i've been working through 
the new collector API (and found myself doing the exact same thing for every 
implementation of Collector)


> Add OutOfOrderCollector and InOrderCollector subclasses of Collector
> --------------------------------------------------------------------
>
>                 Key: LUCENE-1849
>                 URL: https://issues.apache.org/jira/browse/LUCENE-1849
>             Project: Lucene - Java
>          Issue Type: Wish
>          Components: Search
>    Affects Versions: 2.9
>            Reporter: Tim Smith
>            Priority: Minor
>             Fix For: 2.9
>
>
> I find myself always having to implement these methods, and i always return a 
> constant (depending on if the collector can handle out of order hits)
> would be nice for these two convenience abstract classes to exist that 
> implemented acceptsDocsOutOfOrder() as final and returned the appropriate 
> value

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-dev-h...@lucene.apache.org

Reply via email to