Порядок документов 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),

Если вы беспокоитесь о производительности, вы можете попробовать увеличить время индексации, которое должно быть быстрее, чем увеличение времени запроса. Посмотрите здесь.

Другие вопросы по тегам