Uploaded image for project: 'Solr'
  1. Solr
  2. SOLR-8001

Using value sources on a multi-valued field can result in an exception if no data

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 5.3
    • Fix Version/s: 5.4
    • Component/s: None
    • Labels:
      None

      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)

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                hossman Hoss Man
                Reporter:
                dsmiley David Smiley
              • Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: