Сортировка результатов поиска solr по нескольким полям (solrj) - PullRequest
2 голосов
/ 30 января 2012

Мне нужно отсортировать результаты, которые я получаю от apache solr, на основе двух факторов:

В нашей системе есть три объекта, которые проиндексированы с помощью solr (группы, проекты и наборы данных) и в результатах, которые яхотите, чтобы сначала отображались наборы данных, затем проекты, а затем группы;но я все еще хочу уважать значения баллов для каждого из типов.

Так, например: результаты будут

  1. Набор данных с результатом 0,325
  2. Набор данных с результатом 0,282
  3. Набор данных с результатом 0,200
  4. Проект с оценкой 0,298
  5. Проект с оценкой 0,186
  6. Группа с оценкой 0,360
  7. Группа с оценкой 0,270

Я делаю это в java и использую solrj для построения запросов solr.Проблема в том, что когда я пытаюсь добавить 2 поля сортировки к объекту SolrQuery, кажется, что он использует только одно из них.Кроме того, в документах solr нет ничего, что бы указывало тип объекта, но к идентификатору документа добавляется имя объекта, поэтому я планировал использовать это.

Если у кого-нибудь есть какие-либо идеи о том, как я могу этого добиться, я буду очень признателен, так как я застрял на этом некоторое время!

Спасибо взаранее, Джейк.

1 Ответ

6 голосов
/ 30 января 2012

Если похоже, что solrj использует только одно из полей сортировки, возможно, вы используете метод SolrQuery#setSortField вместо addSortField следующим образом:

solrQuery.addSortField("field1", ORDER.desc);
solrQuery.addSortField("field2", ORDER.desc);

Чтобы отсортировать результаты, как вы описали, более чистым решением было бы добавить поле к вашему индексу, содержащее вес, основанный на типе сущности.Тогда вы можете напрямую отсортировать, используя это поле: weight desc, score desc.Прежде чем делать это, просто убедитесь, что вес всегда выигрывает по сравнению со счетом solr, в противном случае вам следует поработать над тем, чтобы повлиять на счет solr.

...