Использование многослойных запросов в Solr - PullRequest
0 голосов
/ 27 декабря 2018

Параметр Solr "qf" работает следующим образом:

Допустим, у меня есть: query = "sid" и qf = [field1, field1_edge, field2, field2_edge].

Оценка Solr рассчитывается следующим образом:

max(f1, f1_e, f2, f2_e) + tie * (sum of other 3 fields) где: "tie" lies in [0,1]

Давайте назовем: winner1 = field with max(f1, f1_e) и winner2 = field with max(f2, f2_e)

Я бы хотел оценить данный запрос в Solr следующим образом:

score1 = winner1_score + tie_1 * loser1_score
score2 = winner2_score + tie_1 * loser2_score

final score = score1 + tie_2 * score2

По сути, я хочу применить qf в два слоя (взяв tie_1 = 0 и tie_2 = 1).Каковы мои варианты реализации этой идеи актуальности?Я думаю, что ни параметр "qf", ни бусты функций не поддерживают это.Спасибо!

1 Ответ

0 голосов
/ 31 декабря 2018

Мне кажется, что способ сделать это - использовать функцию query, которая позволяет применять функции к запросам.Вы комбинируете это с вложенными парсерами запросов, что позволяет запускать несколько запросов dismax.

Вы можете сделать что-то вроде этого (где вы устанавливаете tie1 и tie2 в соответствии с вашими желаниями):

q=_val_:"add(query($qq1),product(query($qq2),${tie2}))"
qq1={!edismax qf='field1 field1_edge' v='sid' tie=${tie1}}
qq2={!edismax qf='field2 field2_edge' v='sid' tie=${tie1}}
tie1=0.5
tie2=0.3

Если вы использовали Solr 7.2 (или выше), вы такженеобходимо установить uf=_query_ *, чтобы хук _val_ работал.

PS: должно быть возможно (хотя я не проверял это) переместить содержимое q в qf параметр и таким образом вам не нужно использовать _val_ hook:

qf=add(query($qq1),product(query($qq2),${tie2}))

...