Упорядочить документы solr с одинаковой оценкой по дате, добавленной по убыванию

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

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

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

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

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

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

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

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

Есть ли негативное влияние на производительность, если я использую recip и ms?


person Dorin    schedule 10.02.2012    source источник
comment
Вы действительно хотите упорядочить по дате только документ с одинаковым баллом? По моему опыту, это всегда было неправильно. Лучше повышать последние документы, влияющие на оценку solr, с помощью функционального запроса, чем просто сортировать, как вы описали.   -  person javanna    schedule 10.02.2012
comment
Это очень хороший вопрос, спасибо. Наиболее важными результатами поиска для меня являются те, которые соответствуют ключевым словам из поисковой фразы. После этого важно, насколько новый документ. Я также постоянно удаляю устаревшие документы из индекса.   -  person Dorin    schedule 10.02.2012
comment
Рад помочь, посмотрите мой ответ.   -  person javanna    schedule 10.02.2012


Ответы (2)


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

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

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

Итак, в вашем случае это будет: sort=score DESC, date_added DESC

person Stelian Matei    schedule 10.02.2012

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

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

другой ответ, который вы получили, идеален.

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

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

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

person javanna    schedule 10.02.2012