ruby-on-railsrubypaperclipelasticsearchtire

Elasticsearch + Tire + PaperClip : Nested objects


I start implementing ElasticSearch in place of a old home-made search engine. I migrate the major part of the code, but I have to render a url provided by paperclip, and I cannot have the right object in my resulsts

has_attached_file :content, url: '/system/:attachment/:id/:style/:filename'

mapping do
  indexes :name
  indexes :description
  indexes :tags do
     indexes :name, type:  :string
  end
  indexes :content, type: :object do
    indexes :url
  end
end


def to_indexed_json
  {
    name: name,
    description: description,
    tags: tags.map { |tag| { name: tag.name }},
    content: content_url_json
  }.to_json
end

And here is the result I have when querying Elasticsearch with curl

{
  "element": {
    "properties": {
      "content": {
        "type": "string"
      },
      "name": {
        "type": "string"
      },
      "tags": {
        "properties": {
          "name": {
            "type": "string"
          }
        }
      }
    }
  }
}

I need to call element.content.url. But since I can't turn content to an object, this call will fail. Could you help me to find how to find what's wrong in my code?


Solution

  • Resolved. Looking in the code, block seems to be interpreted. So I replaced

    indexes :content, type: :object do
        indexes :url
    end
    

    by

    indexes :content { url: {type: :string}}
    

    solved the problem