Solr граней на основе пользовательских функций - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь получить фасеты со значениями, которые меняются со временем.Грани должны выглядеть примерно так: новый , старый , очень старый .

Выбор документа состояние : будь то новый , старый или очень старый основан на чем-то, как показано ниже:

IF max (document.date1, document.date2) - СЕГОДНЯ> NUMBER_OF DAYS_FOR_VERY_OLD - это VERY_OLD ELSE IF max (document.date1, document.date2) - СЕГОДНЯ> NUMBER_OF DAYS_FOR_OLD - это СТАРЫЙ ДАЖЕ НОВЫЙ.

NUMBER_OF DAYS_FOR_OLD и NUMBER_OF DAYS_FOR_VERY_OLD фактически зависят от другого поля документа ( document.type ), поэтому их необходимо вычислить

Я пытался создать пользовательскую функцию (в Java), реализовав ValueSource и ValueSourceParser (как описано здесь https://medium.com/@devchaitu18/sorting-based-on-a-custom-function-in-solr-c94ddae99a12).Это прекрасно работает для получения вычисленного результата с запросом, подобным & fl = my_function (date1, date2, type) .Но, похоже, это не работает в аспектах.

Есть ли способ, которым я могу достичь этого?

Единственный другой вариант, который я вижу, - это добавить больше полей даты в документ при индексациивремя: date_when_doc_becomes_old, date_when_doc_becomes_very_old .

Затем во время запроса используйте сочетание facet.range и facet.pivot .Недостатком этого является то, что всякий раз, когда добавляется новое состояние (например, very_very_old ), мне нужно будет добавлять новое поле и переиндексировать все.Кроме того, запрос аспекта является более сложным, чем если бы я мог просто написать что-то вроде facet.query = my_function (date1, date2, type)

...