Порядок документов solr с одинаковым счетом по дате добавления по убыванию
Я хочу, чтобы результаты поиска из SOLR были упорядочены следующим образом:
Все документы с одинаковым счетом будут упорядочены по убыванию по дате добавления.
Поэтому, когда я сделаю запрос в solr, у меня будет n документов. В этом наборе результатов будут группы документов с одинаковым счетом. Я хочу, чтобы каждая из этой группы документов была упорядочена по убыванию по дате.
Я обнаружил, что могу сделать это, используя запросы функций, точнее используя rord
функция http://wiki.apache.org/solr/FunctionQuery, но, как указано в документации
ВНИМАНИЕ: начиная с Solr 1.4, ord() и rord() могут вызывать избыточное использование памяти, поскольку они должны использовать запись FieldCache в считывателе верхнего уровня, тогда как для сортировки и запросов функций теперь используются записи на уровне сегмента. Следовательно, сортировка или использование другого запроса функции в дополнение к ord()/rord() удвоит использование памяти.
это приведет к избыточному использованию памяти.
Какие еще варианты у меня есть?
Я думал использовать recip(ms(NOW,startTime),1,1,0)
, Это лучший подход?
Есть ли какое-либо негативное влияние на производительность, если я использую Rece и MS?
2 ответа
Вы можете использовать несколько условий сортировки:
Несколько порядков сортировки могут быть разделены запятой, то есть: sort = + [, +]...
http://wiki.apache.org/solr/CommonQueryParameters
Итак, в вашем случае будет: sort=score DESC, date_added DESC
Так как ваши вопросы говорят:
Все документы с одинаковым счетом будут упорядочены по убыванию по дате добавления.
другой ответ, который вы получили, идеален.
В любом случае, я бы посоветовал вам убедиться, что вы действительно хотите отсортировать по дате только для документа с одинаковым счетом. По моему опыту это всегда было неправильно. На самом деле, оценка Solr не абсолютная, а просто относительно других документов, и каждый документ отличается.
Поэтому я не стал бы сортировать по баллам, а потом по другому, потому что трудно предсказать, когда у вас будет одинаковый балл для разных документов. Я бы лично отсортировал только по score
и использовать функцию для повышения последних документов. Вы можете найти хороший пример в Solr Wiki, функция используется там recip(ms(NOW,date_field),3.16e-11,1,1)
,
Если вы беспокоитесь о производительности, вы можете попробовать увеличить время индексации, которое должно быть быстрее, чем увеличение времени запроса. Посмотрите здесь.