Обратная функция с recip(x,m,a,b)
, реализующая a/(m*x+b)
. m,a,b — константы, x — любое числовое поле или произвольно сложная функция.
В случае ваших параметров ваша функция будет выглядеть так:
f(x) = 1 /(3.16e-11*x + 1)
Функция ms
возвращает миллисекунды разницы между своими аргументами.
Даты относятся к эпохе времени Unix или POSIX, полуночи, 1 января 1970 года по всемирному координированному времени.
Представьте, что ваша дата публикации — 1 сентября 2015 года, ms даст нам СЕЙЧАС = 1507725936061, а дата публикации — 1441065600000, и общий результат будет около 0,3, что и будет оценкой для этого документа.
Для вчерашней даты публикации мы получим оценку 0,99, что наводит на мысль, что эта формула будет применять штраф к каждому документу, а не только к тем, которым 2 года. Например, за тот же день 1 год назад оценка будет 0,5.
Я мог бы потенциально подумать о сортировке по этой функции (начиная с Solr 6)
if(gt(ms(mydatefield,NOW-2YEARS),0),1,recip(ms(NOW,publicationDate),3.16e-11,1,1))
Я не проверял это (не уверен в части NOW-2YEARS), но в основном я делаю это:
if mydatefield - NOW-2YEARS greater
than 0 => score will be 1.0
else => I'm calculating reciprocal function
Последнее замечание: в году 3.16e10
миллисекунд, поэтому можно масштабировать даты до долей года с обратным значением, или 3.16e-11
, поэтому для 2 лет вы можете выбрать что-то другое.
person
Mysterion
schedule
11.10.2017