I'm using function queries to boost more recent documents, using something like the
recip(ms(NOW,mydatefield),3.16e-11,1,1) approach described on the wiki: http://wiki.apache.org/solr/FunctionQuery#Date_Boosting What I'd like to do is figure out the best way to tweak how documents with missing date fields are handled. For reference, what the above expression does with docs with missing mydatefield values is to treat those docs as if they were dated at the epoch start. (This is because the default value for a missing field, including a date field, is 0.) What I want to try, in contrast, is to treat docs with missing dates as if they were dated NOW. Can anyone suggest a satisfying way to do this? Here are some options that won't work: Option 1. Use map The most obvious way to do this would be to wrap the reference to mydatefield inside a map, like this: recip(ms(NOW,map(mydatefield,0,0,ms(NOW)),3.16e-11,1,1)) However, this throws an exception because map is hard-coded to take float constants, rather than arbitrary subqueries. Option 2. Use min The second most obvious way is to replace ms(NOW,mydatefield) with this expression: min(ms(NOW),ms(NOW,mydatefield) (Docs with mydatefield will have a very large ms(NOW,mydatefield) term.) However there is no min function, so that won't work. Option 2a. Fake min with max and multiplication Since min(a,b) == -1*max(-1*a, -1*b), you could rewrite the previous expression using this more complicated logic and it would work. But that's ugly. Also, it would crash anyway. It looks like max currently requires one of its arguments to be a float constant, and neither of our args would be a float constant.