Объясните функцию повышения Apache SOLR

Я пытаюсь реализовать логику в APACHE SOLR, чтобы документы старше 2 лет получали штраф в зависимости от разницы в количестве дней или месяцев.

Я использую эту функцию повышения, которую я получил после того, как много погуглил.

 recip(ms(NOW,publicationDate),3.16e-11,1,1) // Currently it is set to use 1 year

Может ли кто-нибудь подтвердить, штрафует ли это старые документы или что?

Спасибо


person Farhan Tahir    schedule 11.10.2017    source источник
comment
ты сам пробовал?   -  person Mysterion    schedule 11.10.2017
comment
да, я пытался, но не уверен, что это на самом деле делает. ?   -  person Farhan Tahir    schedule 11.10.2017
comment
Короткий ответ: да, см. этот ответ, чтобы узнать, как применяется штраф.   -  person EricLavault    schedule 11.10.2017


Ответы (1)


Обратная функция с 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
comment
Спасибо за объяснение. Могу ли я настроить ti так, чтобы штраф применялся только к документам двухлетней давности. - person Farhan Tahir; 11.10.2017
comment
Привет, не могли бы вы также сказать значение, которое я должен использовать в течение 2 лет. вместо 3.16e-11 Спасибо - person Farhan Tahir; 11.10.2017
comment
3.16e-11 должно быть хорошо - person Mysterion; 11.10.2017
comment
кстати, что именно взаимное делает простыми словами, это повышает документы или штрафы? - person Farhan Tahir; 11.10.2017
comment
Проще говоря, это обычно штрафы, взгляните на график, который я разместил. функция убывает - person Mysterion; 11.10.2017
comment
Давайте продолжим обсуждение в чате. - person Farhan Tahir; 11.10.2017
comment
Я использую эту формулу if(gt(ms(created_at,NOW-2YEARS),0),3,recip(ms(NOW,created_at),3.16e-11,1,1)) Но вместо этого я должен использовать 3 из 1, так как использование 1 также возвращало документы 2013 и 2014 годов. чего я не хочу. Как вы думаете, почему он показал эти документы. ? - person Farhan Tahir; 11.10.2017