SOLR Объединенные и взвешенные результаты - PullRequest
1 голос
/ 17 января 2012

У меня есть следующая задача: запросить SOLR и вернуть взвешенный список на основе нескольких условий.

Пример: У меня есть документы со следующими полями, они в основном представляют фильмы:

имя, жанр, актеры, режиссер

Я хочу вернуть 20 документов, отсортированных по следующему условию

  1. Документ имеет 1 актера и одного и того же директора (5 баллов)
  2. В документе участвуют 2 или более актеров (3 балла)
  3. Документ разделяет директор (3 балла)
  4. Документ того же жанра с общим актером (2 балла)
  5. Документ того же жанра (1 балл)

Тогда возьмите эти 4 фильма:


Id: 1 Имя: Гарри Поттер и философский камень
Жанр: приключения
Режиссер: Крис Коламбус
Актеры: Дэниел Рэдклифф, Руперт Гринт, Эмма Уотсон


Id: 2 Имя: Моя неделя с Мэрилин
Жанр: драма
Режиссер: Саймон Кертис
Актеры: Мишель Уильямс, Эдди Редмэйн, Эмма Уотсон


Id: 3 Имя: Перси Джексон и олимпийцы: похититель молний
Жанр: приключения
Справочник: Крис Коламбус
Актеры: Логан Лерман, Брэндон Т. Джексон, Александра Даддарио


Id: 4 Имя: Гарри Поттер и Тайная комната
Жанр: приключения
Режиссер: Крис Коламбус
Актеры: Дэниел Рэдклифф, Руперт Гринт, Эмма Уотсон


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

Возвращаемый результат должен быть:

  1. Id: 1, очков: 14 (соответствует всем 5 условиям)
  2. Id: 3, очков: 4 (соответствует условиям 3 и 5)
  3. Id: 2, очков: 0 (соответствует 0 условиям)

Есть ли возможность сделать это напрямую в SOLR?

Как всегда заранее спасибо :)

Ответы [ 2 ]

2 голосов
/ 20 января 2012

Вы можете возвращать взвешенные результаты с помощью DisMax Query Parser , это называется повышением. Вы можете присвоить столбцам в документе различные веса, используя фильтр запросов, как в следующем примере. Вам придется изменить его, чтобы придумать свою собственную формулу, но вы должны быть в состоянии приблизиться. Начните с настройки чисел в бусте, но в итоге вы можете выполнить более продвинутые функциональные запросы

Из вашего примера, где вы хотите найти документы, которые соответствуют # 4

? Q = Жанр: «Приключения» Режиссер: «Крис Колумбус» Актеры :( «Даниэль Рэдклифф», «Руперт Гринт», «Эмма Уотсон») & qf = Режиссер ^ 2.0 + Актер ^ 1.5 + Жанр ^ 1.0 & fl = *, оценка

    //Get everything that matches #4
    ?q=Genre:'Adventure' Director:'Chris Columnbus' Actors:('Daniel Radcliffe' 'Rupert Grint' 'Emma Watson')

    //use dismax
    &defType=dismax

    //boost some fields with a "query filter"
    //this will make a match on director worth the most
    //each actor will be worth a little bit less, but 2+ actors will be more
    //all matches will be added together to create a score similar to your example
    &qf=Director^2.0+Actor^1.5+Genre^1.0

    //Make sure you can see the score for debugging
    &fl=*,score
0 голосов
/ 19 января 2012

Я не думаю, что есть способ сделать это с Solr из коробки.Вы можете проверить http://solr -ra.tgels.com / , чтобы увидеть, может ли это быть что-то лучше подходит для ваших нужд или показать, как создать свой собственный алгоритм ранжирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...