Объясните сортировку в Solr с несколькими предложениями сортировки

Представьте, что есть запрос Solr с несколькими предложениями сортировки (очевидно, не по счету). Есть ли способ выяснить для каждого найденного документа, какие из этих пунктов привели к ничьей с соседями, а какие действительно использовались для сортировки? Меня особенно интересует один пункт, и я хочу найти все документы, переупорядоченные из-за него.

Например, у меня есть sort=A desc, B asc, C asc с тремя найденными документами, и мне нужно выяснить, какие из них переупорядочены на основе B asc:

Doc 1: perhaps we skip it
Doc 2: "B asc" meaning it has same A value with Doc 1 and B was used as tie breaker.
Doc 3: "A desc" meaning it has different A value from Doc 2 and therefore B was never used for sorting.

Очевидно, что есть несколько способов обойти это.

  • Существует ли механизм, подобный объяснению результатов, который объясняет сортировку вместо оценки?
  • Есть ли способ указать два параметра sort=, отсортировав один и тот же набор документов с двумя разными наборами предложений, получив их оба в ответ, тогда я смогу сравнить наборы документов?
  • Есть ли прямой способ получить решающее предложение сортировки для каждой пары ответных документов?
  • Может быть, есть какой-то компонент поиска, который может это сделать? Насколько сложно будет писать?
  • Конечно, в противном случае я мог бы просто выполнить два запроса Solr (с пунктом сортировки и без него, который мне важен) и сравнить результаты, очевидно, я не хочу делать это с точки зрения производительности...

person alamar    schedule 17.01.2017    source источник
comment
Сравнение одного документа с другим, чтобы определить, какое поле было решающим, не кажется слишком сложным для самостоятельного выполнения, при условии, что ваши поля сортировки сохранены. Просто что-то вроде: if (doc1.A != doc2.A then A; else if (doc1.B != doc2.B then B; else C;))   -  person femtoRgon    schedule 18.01.2017
comment
@femtoRgon У меня не одинаковая сортировка каждый день. Вчера это могло быть A desc, сейчас C asc, а завтра это формула, что усложняет репликацию.   -  person alamar    schedule 18.01.2017


Ответы (1)


Самое близкое, о чем я могу думать, это переоценка запросов . Таким образом, вы поместите в него свою специальную сортировку, возможно, используя ключевое слово val для преобразования ожидаемого запроса в оценку, полученную из значения поля. Но это работает только с числами или функциями.

Кроме того, параметр сортировки по-прежнему будет переопределять этот параметр, поскольку изменение ранжирования влияет на исходную оценку. Таким образом, вместо этого вам придется переместить все в функцию подсчета очков. Что может быть проблематично, если вы сортируете по текстовым полям.

Так что, возможно, это не стоит делать в Solr. Если вы можете сделать это с помощью двойного запроса, это, вероятно, будет самым простым путем вперед.

person Alexandre Rafalovitch    schedule 18.01.2017