есть User
модель.Как суммировать boost точки elasticsearch результаты и отсортировать их?
class User < ActiveRecord::Base
attr_accessible :last_visited_at, :friend_id, :blacklisted
has_many :friends
end
И условия:
- Если фраза существует в описании, дать этому пользователю балл 10.
- Если последний визит был менее чем за 3 дня назад, дать этому пользователю 5 баллов .
- Если у вас есть друзья, дайте этому пользователю оценку 8.
- Если вы вошли в черный список, покажите этого пользователя в конце списка результатов, не зависимо от оценки.
Как реализовать это, используя Elasticsearch? Как подсчитать точки результатов поиска пользователей и сортировки?
Сейчас у меня есть
def self.search(params)
tire.search(load: true) do
query do
custom_filters_score do
query { all }
filter do
filter :range, last_contact_at: { gte: 3.days.ago }
boost 1
end
score_mode :total
end
end
end
end
EDIT:
В пункте 4 Я хочу, чтобы сбросить счет до 0, если пользователь на черном списке.
Вы используете частичное или полное совпадение описания? Как определить конечную релевантность соответствия? Есть ли какая-то логика приоритета? –
Я хочу использовать частичное совпадение описания. Конечным матчем должен быть список пользователей, отсортированных по общей сумме баллов. – tomekfranek