[ 
https://issues.apache.org/jira/browse/LUCENE-5021?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alexis Torres Paderewski updated LUCENE-5021:
---------------------------------------------

    Description: 
Hello,

I would like to apply ACL once as a PostFilter and I therefore need to bulk 
this call since round trips would severely decrease performances.

I tried to just stack them on the DelegatingCollector using this collect :

    @Override
    public void collect(int doc) throws IOException {
        while ((doc = scorer.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
            docs.put(getDocumentId(doc), doc);
        }

        batchCollect();
    }

Depending on the Scorer it may or it may not work. Indeed when the Scorer is 
"Safe"  that is when it handles 
the case in which the scorer is exhausted and is called once again after 
exhaustion.
This is the case of the (e.g. DisjunctionMaxScorer, ConstantScorer):

if (numScorers == 0) return doc = NO_MORE_DOCS; 


On the other hand, when using the DisjunctionSumScorer, it either asserts on 
"NO_MORE_DOCS", or it throws a NPE.


Shouldn't we copy the DisjunctionMaxScorer mechanism to protect nextDoc of an 
exausted iterator using either current doc or checking numbers of subScorers ?


  was:
Hello,

I want to apply ACL once as a PostFilter and I would need to bulk this call 
since round trips would decrease severely performances.

I tryed to just stack them on the DelegatingCollector using this collect :

    @Override
    public void collect(int doc) throws IOException {
        while ((doc = scorer.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
            docs.put(getDocumentId(doc), doc);
        }

        batchCollect();
    }

Sometime it works, when Scorer calling me are "Safe" like the ConstantScorer, 
but when DisjunctionSumScorer calls me, it either assert on NO_MORE_DOCS if 
assert are enabled, or it throw a NPE.

Should we copy DisjunctionMaxScorer mechanism to protect nextDoc of an exausted 
iterator using either current doc or checking numbers of subScorers ?

    
> NextDoc safety for bulk collecting
> ----------------------------------
>
>                 Key: LUCENE-5021
>                 URL: https://issues.apache.org/jira/browse/LUCENE-5021
>             Project: Lucene - Core
>          Issue Type: Improvement
>          Components: core/index, core/other
>    Affects Versions: 3.6.2
>         Environment: Any with custom filters
>            Reporter: Alexis Torres Paderewski
>              Labels: NPE,, Null-Safety, Scorer
>
> Hello,
> I would like to apply ACL once as a PostFilter and I therefore need to bulk 
> this call since round trips would severely decrease performances.
> I tried to just stack them on the DelegatingCollector using this collect :
>     @Override
>     public void collect(int doc) throws IOException {
>         while ((doc = scorer.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
>             docs.put(getDocumentId(doc), doc);
>         }
>         batchCollect();
>     }
> Depending on the Scorer it may or it may not work. Indeed when the Scorer is 
> "Safe"  that is when it handles 
> the case in which the scorer is exhausted and is called once again after 
> exhaustion.
> This is the case of the (e.g. DisjunctionMaxScorer, ConstantScorer):
> if (numScorers == 0) return doc = NO_MORE_DOCS; 
> On the other hand, when using the DisjunctionSumScorer, it either asserts on 
> "NO_MORE_DOCS", or it throws a NPE.
> Shouldn't we copy the DisjunctionMaxScorer mechanism to protect nextDoc of an 
> exausted iterator using either current doc or checking numbers of subScorers ?

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to