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

Hoss Man commented on LUCENE-1789:
----------------------------------

bq. How about this: we add a new param to the ctors of the value sources, 
called (say) acceptMultiReader. It has 3 values:

...that would work ... but i feel like there may be a cleaner API possible 
here...

What if we just added a new MultiValueSource wrapper class, that acted as a 
proxy around another ValueSource so that the only non-transparent behavior is 
that MultiValueSource.getDocValues returns an instance of the new 
MultiDocValues we've been talking about.

If you use something like FloatFieldSource directly in your code, you get what 
you ask for: the FieldCache is fetched agaisnt the exact reader you supply (ie: 
YES_BURN_MEMORY).  If you want to use a FieldSource directly in your code, and 
you want to get good cache reuse, and you don't want to sorry about the 
subreaders yourself, you wrap your FieldSource in a new 
MultiValueSource(myFieldSource)  (YES_BURN_TIME)

The only thing this wouldn't get us is an obvious warning to developers on 
upgrading (like the deprecation warnings htat would come from your suggested 
API) ... but since nothing about backwards compatibility is actually breaking 
here, that doesn't seem like the end of the world -- we can document it in 
CHANGES.txt (we're going to need a nice big section there about all the 
FieldCache usage changes anyway) drawing their attention to the new 
MultiValueSource they should consider using.

My thinking is this: anybody who is constructing new ValueSOurces directly is 
pretty deep into the code, odds are if they're using that type of code, they 
might be mucking with the FieldCache directly in other ways as well -- we can't 
solve all their problems, but we can give them helper code to make the 
transition easier)


> getDocValues should provide a MultiReader DocValues abstraction
> ---------------------------------------------------------------
>
>                 Key: LUCENE-1789
>                 URL: https://issues.apache.org/jira/browse/LUCENE-1789
>             Project: Lucene - Java
>          Issue Type: Improvement
>            Reporter: Hoss Man
>            Priority: Minor
>             Fix For: 2.9
>
>
> When scoring a ValueSourceQuery, the scoring code calls 
> ValueSource.getValues(reader) on *each* leaf level subreader -- so DocValue 
> instances are backed by the individual FieldCache entries of the subreaders 
> -- but if Client code were to inadvertently  called getValues() on a 
> MultiReader (or DirectoryReader) they would wind up using the "outer" 
> FieldCache.
> Since getValues(IndexReader) returns DocValues, we have an advantage here 
> that we don't have with FieldCache API (which is required to provide direct 
> array access). getValues(IndexReader) could be implimented so that *IF* some 
> a caller inadvertently passes in a reader with non-null subReaders, getValues 
> could generate a DocValues instance for each of the subReaders, and then wrap 
> them in a composite "MultiDocValues".

-- 
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