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

Hoss Man commented on SOLR-9279:
--------------------------------

I haven't been following the updates since my last comment, but to answer your 
question...

bq.  Is there documentation on an object value source? I'm not sure what's 
expected here.

...well, per the javadocs it's "Native Java Object representation of the value" 
for the doc -- ie: whatever type makes the most sense for the given value 
source (as opposed to byteVal, intVal, floatVal, etc... where the caller says 
what type they want)

For the DocValue based FunctionValues, it's the type of the field 
(IntFieldSource.getValues returns an IntDocValues which implements objectVal by 
delegating to intVal if exists is true, etc.

For ValueSources that "wrap" other value sources, things get more complicated 
-- in the IfFunction, the FunctionValues delegates to one wrapped 
FunctionValues or the other, depending on the conditional.

practically speaking: the main place objectValue comes into play is when end 
users ask for the value of a ValueSource in the fl list, ie: 
{{fl=id,value:div(popularity,price),inStock:gte(quantityonHand,1)}}

since these new functions represent boolean concepts (even if they are wrapping 
numeric inputs), i would expect them to implement objectValue the same way 
BoolDocValues does...
{code}
  @Override
  public Object objectVal(int doc) {
    return exists(doc) ? boolVal(doc) : null;
  }
{code}

...ideally you'd just extend BoolDocValues since all of it's methods should 
also apply to your usecase. (maybe you were doing that in your previous patch 
and i just missed it -- i dunno? ... from my comment it looks like i mainly 
just noticed you weren't _testing_ for this usage to return Boolean objects)



> Add greater than, less than, etc in Solr function queries
> ---------------------------------------------------------
>
>                 Key: SOLR-9279
>                 URL: https://issues.apache.org/jira/browse/SOLR-9279
>             Project: Solr
>          Issue Type: New Feature
>      Security Level: Public(Default Security Level. Issues are Public) 
>          Components: search
>            Reporter: Doug Turnbull
>             Fix For: master (7.0)
>
>
> If you use the "if" function query, you'll often expect to be able to use 
> greater than/less than functions. For example, you might want to boost books 
> written in the past 7 years. Unfortunately, there's no "greater than" 
> function query that will return non-zero when the lhs > rhs. Instead to get 
> this, you need to create really awkward function queries like I do here 
> (http://opensourceconnections.com/blog/2014/11/26/stepwise-date-boosting-in-solr/):
> if(min(0,sub(ms(mydatefield),sub(ms(NOW),315569259747))),0.8,1)
> The pull request attached to this Jira adds the following function queries
> (https://github.com/apache/lucene-solr/pull/49)
> -gt(lhs, rhs) (returns 1 if lhs > rhs, 0 otherwise)
> -lt(lhs, rhs) (returns 1 if lhs < rhs, 0 otherwise)
> -gte
> -lte
> -eq
> So instead of 
> if(min(0,sub(ms(mydatefield),sub(ms(NOW),315569259747))),0.8,1)
> one could now write
> if(lt(ms(mydatefield),315569259747,0.8,1)
> (if mydatefield < 315569259747 then 0.8 else 1)
> A bit more readable and less puzzling



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

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

Reply via email to