2013-06-09 9 views
1

Учитывая следующее сопоставление модели под названием Post, возможно ли построить запрос, который возвращает должности, упорядоченные по количеству голосов, поданных за определенный промежуток времени (например, за последние 7 дней)?Сортировка по количеству вложенных элементов с помощью ElasticSearch и Tire

mapping do 
    indexes :id, type: 'integer' 
    indexes :user_id, type: 'integer' 
    indexes :name, boost: 10 
    indexes :body # analyzer: 'snowball' 
    indexes :created_at, type: 'date' 
    indexes :vote_count, type: 'integer' 

    indexes :topic_ids 

    indexes :topics do 
     indexes :id, type: 'integer' 
     indexes :name, type: 'string' 
    end 

    indexes :votes do 
     indexes :user_id, type: 'integer' 
     indexes :created_at, type: 'date' 
    end 
end 

Я пользуюсь Tire in Rails 3.2.13. У меня есть модель Post и модель Vote. У Почты много голосов, а голосование принадлежит Post.

ответ

0

Да, вы можете либо отсортировать по адресу vote_count atrribute, либо использовать запрос custom_score для мелкомасштабного вычисления релевантности.

Для прежнего, что-то вроде:

require 'tire' 

s = Tire.search do 
    query do 
    filtered do 
     query { all } 
     filter :range, 'created_at' => { from: '-7d' } 
    end 
    end 
    sort do 
    by :vote_count 
    end 
end 

puts s.to_curl