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

Simon Willnauer commented on LUCENE-2694:
-----------------------------------------

bq. I think instead of ReaderView we could change Weight.scorer API so that 
instead of receiving IndexReader reader, it receives a struct that has parent 
reader, sub reader, ord of that sub?

so I changed the Weight#scorer API to use a class called ScoreContext that 
holds the parent reader, the current sub and the subs ord. That change is 
absolutely massive! I don't upload that change since I think if we do that we 
need to do it in a different issue anyway. I ran into a couple of problems:

* if we pass in such a context we also need to change the explain interface 
since its calling Weight#scorer here and there
* Once we pass in the Context stuff like QueryWrapperFilter doesn't work 
anymore since it doesn't know which ord the incoming reader has. So Filters 
would need a context too. I don't like that!
* Stuff like scoreDocsInOrder are hard to put into such a context since almost 
all scorers internally are called with scoreDocsInOrder=true with a contant. 
meaning that nobody really respects the incoming value for subscorers though. 
but if i just forward the context the member needs to be set to true or the 
context needs to be cloned for subs - see BooleanQuery for instance.

* such a context would somehow enforce that MTQ are only executed against the 
Reader they where rewritten against. Which is how it should be IMO but we are 
also depending on that everybody who uses a MTQ knows exactly how the query was 
rewritten which is kind of not obvious. I think we need a better way to enforce 
stuff like that.

after all I think this must be done in a different issue though. This issue was 
meant to make MTQ single pass so lets do that first.... progress over 
perfection ey mike :). 
Nonetheless, it seems like that we need to rethink the Weight API entirely I 
also don't like that Weight operates on Searcher instead of IndexSearcher 
though.


> MTQ rewrite + weight/scorer init should be single pass
> ------------------------------------------------------
>
>                 Key: LUCENE-2694
>                 URL: https://issues.apache.org/jira/browse/LUCENE-2694
>             Project: Lucene - Java
>          Issue Type: Improvement
>          Components: Search
>            Reporter: Michael McCandless
>            Assignee: Simon Willnauer
>             Fix For: 4.0
>
>         Attachments: LUCENE-2694-FTE.patch, LUCENE-2694.patch, 
> LUCENE-2694.patch, LUCENE-2694.patch, LUCENE-2694.patch, LUCENE-2694.patch, 
> LUCENE-2694.patch
>
>
> Spinoff of LUCENE-2690 (see the hacked patch on that issue)...
> Once we fix MTQ rewrite to be per-segment, we should take it further and make 
> weight/scorer init also run in the same single pass as rewrite.

-- 
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: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to