Как получить рейтинги / количество категорий с помощью Tire / ElasticSearch?

Я пытаюсь получить вложенные данные из запроса ElasticSearch, в основном пытаясь получить из модели Movie:

title
ratings
categories

Я попробовал две настройки шин, но обе возвращают только названия фильмов, а не рейтинги или категории. Например. индексы кажутся только:

curl -X POST "http://localhost:9200/movies/_search?pretty=true" -d '
 {
    "query" : { "query_string" : {"query" : "t*"} },
    "facets" : {
      "categories" : { "terms" : {"field" : "categories"} }
    }
  }
'
{
  "took" : 16,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 3,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "movies",
      "_type" : "movie",
      "_id" : "13",
      "_score" : 1.0, "_source" : {"description":null,"id":13,"title":"Tiny Plastic Men"}
    }, {
      "_index" : "movies",
      "_type" : "movie",
      "_id" : "32",
      "_score" : 1.0, "_source" : {"description":null,"id":32,"title":"The Extreme Truth"}
    }, {
      "_index" : "movies",
      "_type" : "movie",
      "_id" : "39",
      "_score" : 1.0, "_source" : {"description":null,"id":39,"title":"A Time of Day"}
    } ]
  },
  "facets" : {
    "categories" : {
      "_type" : "terms",
      "missing" : 3,
      "total" : 0,
      "other" : 0,
      "terms" : [ ]
    }
  }

Это моя модель фильма:

class Movie  :categorizations
  belongs_to :user

  has_many :ratings

  mapping do
     indexes :id, type: 'integer'
     indexes :title, boost: 40
     indexes :description, analyzer: 'snowball'
     indexes :categories do
       indexes :id, type: 'integer'
       indexes :name, type: 'string', index: 'not_analyzed'
     end
     indexes :ratings do
       indexes :id, type: 'integer'
       indexes :stars, type: 'integer'
     end
   end

end

Ветка для моего поискового эксперимента находится здесь: https://github.com/mulderp/moviedb/tree/categories

Как я могу сделать так, чтобы функции поиска работали, например, Жанры -> Рейтинги.


person poseid    schedule 05.05.2013    source источник


Ответы (1)


Фактически вы не индексируете категории или рейтинги: они присутствуют в сопоставлении, но реализация шины по умолчанию для to_indexed_json просто вызывает метод to_json, предоставляемый activerecord.

Вам нужно переопределить это, чтобы включить информацию о категории / рейтинге, например

def to_indexed_json
  to_json(:include => [:categories, :ratings])
end
person Frederick Cheung    schedule 05.05.2013