Date boosting in an eDisMax query
Let us use eDisMax to boost the results of a search based on date so that the most recent book appears on top. We will use the
setBoostFunctionsMult()
function to specify the boost on modified_date
, which in our case stores the date when the record was last added or updated.
$query = $client->createSelect(); $query->setQuery('cat:book -author:martin'); $edismax = $query->getedismax(); $edismax->setBoostFunctionsMult('recip(ms(NOW,last_modified),1,1,1)'); $resultSet = $client->select($query);
Here we are searching for all books where the author is not named Martin (martin
). The –
(negative sign) is meant for not query. And we have added a multiplicative boost on the reciprocal of the date between today and last modified date. The recip
function provided by Solr is defined as follows:
recip(x,m,a,b) = a/(m*x+b) which in our case becomes 1/(1*ms(NOW,last_modified)+1)
Here m
, a
, and b
are constants, x
can be any numeric value or complex function...