灵活的模型与Elasticsearch和Tire

时间:2012-07-22 00:42:57

标签: ruby-on-rails elasticsearch tire

在Rails应用程序中,我希望能够存储无架构的对象 - JSON数据结构,它可以在不同的对象之间具有不同的结构,或者在不同的时间对于同一个对象。

使用ElasticSearch我可以做到这一点。但是,我想对Rails使用某种ORM。

尝试使用Tire教程进行一些测试,在Rails控制台中执行此操作:

>>> c = Article.new :title =>'New article', :content => { :a => 'a', :b => 'b'}

我可以看到内容数据存储为序列化的YAML:

>> Article.last.content
=> "---\n:a: a\n:b: b\n"

这需要将搜索结果解析为JSON,这不是问题。但主要问题是:我能搜索序列化数据吗?有没有办法从任意结构化数据(如Object.keys)返回属性名称?

如果不是Tire,还有其他解决办法吗?

1 个答案:

答案 0 :(得分:1)

不太确定你在这里做了什么,但是Tire确实附带了ActiveRecord集成的替代品,只是你班级的include Tire::Model::Persistence。您还可以定义属性(使用映射,类型转换,默认值等):

class Article

  include Tire::Model::Persistence

  property :title
  property :published_on, type: 'date'
  property :tags,         analyzer: 'keyword', default: []

end

Tire 自述文件和integration tests包含所有信息。

当然,您可以在content属性内搜索 - 这只是正确映射的问题。

如果您遇到某些特定行为,请更新您的问题......