Порядок документов solr с одинаковым счетом по дате добавления по убыванию - PullRequest
8 голосов
/ 10 февраля 2012

Я хочу, чтобы результаты поиска в SOLR были упорядочены следующим образом:

Все документы с одинаковым счетом будут упорядочены по убыванию по дате добавления.

Так что, когда я сделаю запрос в solr, у меня будет n документов. В этом наборе результатов будут группы документов с одинаковым счетом. Я хочу, чтобы каждая из этой группы документов была упорядочена по убыванию по дате.

Я обнаружил, что могу выполнить это, используя запросы функций, точнее говоря, rord function http://wiki.apache.org/solr/FunctionQuery#rord,, но, как указано в документации

ВНИМАНИЕ: начиная с Solr 1.4, ord () и rord () могут привести к избыточному использованию памяти так как они должны использовать запись FieldCache в читателе верхнего уровня, в то время как Сортировка и функциональные запросы теперь используют записи на уровне сегмента. Отсюда сортировка или использование другого запроса функции, в дополнение к ord () / rord () удвоит использование памяти.

это приведет к избыточному использованию памяти.

Какие еще есть варианты?

Я думал использовать recip(ms(NOW,startTime),1,1,0). Это лучший подход?

Есть ли какое-либо отрицательное влияние на производительность, если я использую rece и ms?

Ответы [ 2 ]

16 голосов
/ 10 февраля 2012

Вы можете использовать несколько условий SORT:

Несколько порядков сортировки могут быть разделены запятой, например: sort = + [, +] ...

http://wiki.apache.org/solr/CommonQueryParameters

Итак, в вашем случае будет: сортировка = оценка DESC, дата добавлена ​​DESC

5 голосов
/ 10 февраля 2012

Поскольку ваши вопросы говорят:

Все документы с одинаковым баллом будут упорядочены по убыванию по дате добавления.

другой полученный вами ответ является идеальным.

В любом случае, я бы посоветовал вам убедиться, что вы действительно хотите отсортировать по дате только для документа с одинаковым счетом.По моему опыту это всегда было неправильно.На самом деле, оценка solr не является абсолютной, а относится только к другим документам, и каждый документ отличается.

Поэтому я бы не стал сортировать по баллам, а затем по другому, потому что трудно предсказать, когда выиметь одинаковые оценки для разных документов.Лично я бы сортировал только по score и использовал бы функцию для повышения последних документов.Вы можете найти хороший пример на solr wiki , там используется функция recip(ms(NOW,date_field),3.16e-11,1,1).

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

...