[
https://issues.apache.org/jira/browse/SOLR-8001?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Hoss Man updated SOLR-8001:
---------------------------
Description:
SOLR-2522 Introduced the ability to reference a multi-valued field with doc
values in a function query (value source) such as like this (an example using
it for sorting): {{sort=field(myMultiValField,min) asc}}. In the event that
the document has no values for this field, this feature behaves nicely in the
aforementioned example. And it does if you reference in a 'fl' (as a
DocTransformer): {{fl=id,myMultiValField:field(myMultiValField,min)}}. In that
case, the returned document simply doesn't have a name-value pair. *But*, if
you sort on a more complex function that incorporates this, then you get an
ArrayIndexOutOfBoundsException. Such as this:
{{sort=sum(otherField,field(myMultiValField,min)) asc}} There may be other
conditions where this same exception will be thrown; not sure.
The root cause can either be considered one of two things (or both) I think:
* The longVal, intVal, etc. methods on FunctionValues need to be prepared for
the possibility that the document has no data, in which case it should return a
default value. This means TrieLongField (& friends) are erroneous.
* ValueSource.ValueSourceComparator could/should (?) call {{exists}} before
calling {{doubleVal}} in the various methods where it does.
----
A workarround for Solr 5.3 users that should work in any situation is to wrap
the {{field}} function in a {{def}} function since that forces an existence
check before attempting to access the value (ie: use
{{sort=def(field(mult_field,min),0)+asc}} instead of
{{sort=field(mult_field,min)+asc}})
was:
SOLR-2522 Introduced the ability to reference a multi-valued field with doc
values in a function query (value source) such as like this (an example using
it for sorting): {{sort=field(myMultiValField,min) asc}}. In the event that
the document has no values for this field, this feature behaves nicely in the
aforementioned example. And it does if you reference in a 'fl' (as a
DocTransformer): {{fl=id,myMultiValField:field(myMultiValField,min)}}. In that
case, the returned document simply doesn't have a name-value pair. *But*, if
you sort on a more complex function that incorporates this, then you get an
ArrayIndexOutOfBoundsException. Such as this:
{{sort=sum(otherField,field(myMultiValField,min)) asc}} There may be other
conditions where this same exception will be thrown; not sure.
The root cause can either be considered one of two things (or both) I think:
* The longVal, intVal, etc. methods on FunctionValues need to be prepared for
the possibility that the document has no data, in which case it should return a
default value. This means TrieLongField (& friends) are erroneous.
* ValueSource.ValueSourceComparator could/should (?) call {{exists}} before
calling {{doubleVal}} in the various methods where it does.
> Using value sources on a multi-valued field can result in an exception if no
> data
> ---------------------------------------------------------------------------------
>
> Key: SOLR-8001
> URL: https://issues.apache.org/jira/browse/SOLR-8001
> Project: Solr
> Issue Type: Bug
> Reporter: David Smiley
> Assignee: Hoss Man
> Priority: Minor
> Attachments: SOLR-8001.patch
>
>
> SOLR-2522 Introduced the ability to reference a multi-valued field with doc
> values in a function query (value source) such as like this (an example using
> it for sorting): {{sort=field(myMultiValField,min) asc}}. In the event that
> the document has no values for this field, this feature behaves nicely in the
> aforementioned example. And it does if you reference in a 'fl' (as a
> DocTransformer): {{fl=id,myMultiValField:field(myMultiValField,min)}}. In
> that case, the returned document simply doesn't have a name-value pair.
> *But*, if you sort on a more complex function that incorporates this, then
> you get an ArrayIndexOutOfBoundsException. Such as this:
> {{sort=sum(otherField,field(myMultiValField,min)) asc}} There may be other
> conditions where this same exception will be thrown; not sure.
> The root cause can either be considered one of two things (or both) I think:
> * The longVal, intVal, etc. methods on FunctionValues need to be prepared for
> the possibility that the document has no data, in which case it should return
> a default value. This means TrieLongField (& friends) are erroneous.
> * ValueSource.ValueSourceComparator could/should (?) call {{exists}} before
> calling {{doubleVal}} in the various methods where it does.
> ----
> A workarround for Solr 5.3 users that should work in any situation is to wrap
> the {{field}} function in a {{def}} function since that forces an existence
> check before attempting to access the value (ie: use
> {{sort=def(field(mult_field,min),0)+asc}} instead of
> {{sort=field(mult_field,min)+asc}})
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]