Добрый день
Я использую пользовательский ранкер: ranker=expr(‘‘2000 * bm25f(2.0, 0.85, {docadopt=2, docname=1000, doctext=1})’’), он хорошо справляется с документами, которые необходимо ранжировать по docname. Но плохо справляется с теми документами, которые необходимо ранжировать по docadopt. Если я повышаю приоритет docadopt, то релевантность ухудшается.
Можно ли как-то описать, что если каждое слово из поискового запроса покрывает поле docadopt, то необходимо увеличить вес документа в выборке?
Например: Закон №126 ФЗ “О связи” - docname = “О связи”, docadopt = “Закон №126 ФЗ”
SELECT ss.docadopt,
ss.docname,
ss.weight,
ss.attrs_clause
FROM public.sphinx_query_params('127.0.0.1', 9306, '
SELECT
attrs.docadopt AS docadopt,
attrs.docname AS varchar,
weight() AS weight,
((attrs.lastredaction = 1)) AS attrs_clause
FROM bpas
WHERE (MATCH(''Закон 126 ФЗ''))
AND (attrs_clause = 1)
AND (attrs.baseid IN (''c000000000''))
GROUP BY attrs.docid
ORDER BY weight DESC
LIMIT 20
OPTION max_matches=2000,
index_weights=(c000000000=20),
ranker=expr(''2000 * bm25f(2.0, 0.85, {docadopt=2, docname=1000, doctext=1})'')')
AS ss (docadopt varchar,
docname varchar,
weight integer,
attrs_clause integer)