У меня есть Solr (6.2) DisMax Select Query, который использует pf (поля фразы) и ps (фраза slop).
pf = text^2.2 title^2.2, ps = 2
;
Я хочу, чтобы мой запрос возвращал результаты в соответствии с этим алгоритмом:
- Если есть точные совпадения для запрашиваемой фразы, сначала верните их, сортировка по дате
- Если есть документы, содержащие хотя бы одно из слов запрашиваемой фразы, вернуть их вторыми, отсортировать по дате
Пример данных: текст (последняя отметка времени в скобках)
- материал о важных людях (2018)
- важных людях: статья (2019)
- некоторые люди считают это важным (2020 )
- важные новости (2015)
- человек десятилетия (2020)
Желаемый результат :
фразы с приемлемым отрывом в первую очередь
- некоторые люди считают, что это важно (2020)
- важные люди: статья (2019)
- материал о важные люди (2018)
тогда хотя бы одно из слов
человек десятилетия (2020) важные новости (2015)
Что я пробовал :
- оборачивая запрос в двойные кавычки и используя
qs
(словосочетание словосочетания), таким образом он работает по желанию, но игнорирует часть «хотя бы одно из слов»; - с использованием bq (запрос на повышение) ) как
last_modified:[NOW/DAY-3MONTH TO NOW/DAY]^20.0
; - с использованием bf (функция повышения), например
recip(ms(NOW,last_modified),3.16e-11,1,1)
; - явная
last_modified desc
сортировка - но она полностью игнорирует - , используя несколько sort
score desc, last_modified desc
- но вторая сортировка будет работать только в том случае, если для первой будет ie (а в ie почти нет)