Я выполняю некоторый анализ данных с помощью SOLR, и я застрял на одной части, которая потенциально может принести мне большую пользу.
У меня есть коллекция solr, в которой есть ряд числовых полей, которые являются диапазонами, например:
pr_high_max = 10.35
pr_high_min = 8.15
pr_med_max = 12.55
pr_med_min = 10.40
Каждая комбинация min/max обеспечивает ценовой диапазон, высокая/средняя часть определяется количеством предметов в текущей группе в этом диапазоне, есть некоторая забавная математика, в которую я не собираюсь вдаваться.
Мне нужно запросить solr с ценой товара и получить документ с этой ценой в одном из диапазонов, мне нужно иметь возможность присвоить ему вес, чтобы высокие поля имели приоритет над средними полями. По сути, это обратный поиск RANGE.
Есть и другие поля, которые я запрашиваю, поэтому они должны быть включены во взвешивание, этого также не может быть в fq, поскольку, если элемент не соответствует этому критерию, есть другие, которым он может соответствовать.
До сих пор мне удалось собрать этот функциональный запрос:
prboost:sum(
if(and(query({!edismax v='pr_high_max:[8 TO *]' }),query({!edismax v='pr_high_min:[* TO 8]'})),5,0),
if(and(query({!edismax v='pr_med_max:[8 TO *]' }),query({!edismax v='pr_med_min:[* TO 8]'})),3,0),
if(and(query({!edismax v='pr_low_max:[8 TO *]' }),query({!edismax v='pr_low_min:[* TO 8]'})),1,0),
)
Где 8 — это цена, которую я буду передавать, в основном это проверяет, находится ли цена в каком-либо из диапазонов, и если это так, я возвращаю значение: 5 для максимума, 3 для медиана, 1 для минимума. . В идеале я хотел бы включить это в обычное взвешивание, но я не смог добавить это как подзапрос. Кроме того, если я попытаюсь увеличить его, я вернусь «Бесконечная рекурсия обнаружила запрос на синтаксический анализ« pr_high_max: [8 TO *] »»
Кто-нибудь сталкивался с чем-то подобным раньше? Любые идеи?
Кроме того, я контролирую происходящие данные, поэтому я могу легко изменить их, чтобы представить диапазон по-другому, если это упростит разрешение.
заранее спасибо