#solr #lucene
#solr #lucene
Вопрос:
У меня есть сортировка, которая выглядит как
sort=score_dx desc, date_dt desc
.
Проблема в том, что если при первой сортировке есть связь, то вторая сортировка применяется ко всей записи, а не только к уже отсортированным подмножествам.
например:
это то, что у меня есть из приведенной выше сортировки
score_dx date_dt
0.1 2015/10/24
0.1 2015/10/23
0.9 2015/10/20
0.9 2015/10/19
чего я хочу, так это
score_dx date_dt
0.9 2015/10/20
0.9 2015/10/19
0.1 2015/10/24
0.1 2015/10/23
Результат первой сортировки не должен изменяться, а затем вторая сортировка применяется к подмножеству.
Как это сделать в Solr?
Комментарии:
1. Приведенный вами пример запроса должен дать вам желаемый результат. У вас нет нескольких записей sort = в строке запроса? Каков тип score_dx и date_dt? И это 0,9 из одного поля и 2015/10/19 из другого поля? (оценка по сравнению с датой, одно поле с / между ними заставило меня усомниться). Если бы сначала было 0.9 против 0.9, я бы заподозрил неточности IEEE 754 для числа с плавающей запятой, но 0.1 сортируется первым, это подозрительно.
2. @MatsLindh
score_dx
являетсяTrieLongField
иdate_dt
являетсяTrieDateField
. да, они из разных полей. Я не получаю того, что ожидается. Если есть одинаковые значения оценки, то сортировка date_dt вступает во владение, и даже если есть строка с низкой оценкой с последней датой, она находится сверху
Ответ №1:
Поскольку score_dx
равно a TrieLongField
, значение будет преобразовано в целое число (long — это целое число с более широким диапазоном, чем у int, 64 бита против 32 бит), что означает, что все проиндексированные вами значения фактически идентичны. Сортировка по ним затем даст порядок, который кажется случайным между ними, и единственным, что фактически применяет сортировку, будет второй критерий.
Измените поле на a TrieDoubleField
и переиндексируйте свой контент, и сортировка должна работать так, как вы ожидаете.
Причина, по которой вы видите 0.9, заключается в том, что это сохраненное значение поля, а не фактическое значение, используемое для поиска.