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

Shai Erera commented on LUCENE-5683:
------------------------------------

I implemented it, many tests fail in CheckIndex on ClassCastException. So this 
is the current code:

{code}
FieldInfo fi = getDVField(field, DocValuesType.BINARY);
if (fi == null) {
  return null;
}

Map<String,Object> dvFields = docValuesLocal.get();
BinaryDocValues dvs = (BinaryDocValues) dvFields.get(field);
if (dvs == null) {
  // initialize
  ...
}
{code}

And I changed it so that the FieldInfo part is inside the {{if}} (lazily 
initialize). The reason for the ClassCastException is that if you previously 
asked for a NUMERIC field w/ same name, it got into the map, therefore the code 
happily tries to case it to a NumericDocValues, or BinaryDocValues and hits the 
exception.

So I'm not sure this optimization is right .. but also that it's worth 
complicating the code w/ e.g. instanceof checks?

> Improve SegmentReader.getXXXDocValues
> -------------------------------------
>
>                 Key: LUCENE-5683
>                 URL: https://issues.apache.org/jira/browse/LUCENE-5683
>             Project: Lucene - Core
>          Issue Type: Improvement
>            Reporter: Shai Erera
>            Assignee: Shai Erera
>
> Today we do two hash lookups, where in most cases a single one is enough. 
> E.g. SR.getNumericDocValues initializes the FieldInfo (first lookup in 
> FieldInfos), however if that field was already initialized, we can simply 
> check dvFields.get(). This can be improved in all getXXXDocValues as well as 
> getDocsWithField.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

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

Reply via email to