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