【问题标题】:Flexible model with Elasticsearch and Tire使用 Elasticsearch 和 Tire 的灵活模型
【发布时间】:2012-07-22 00:42:57
【问题描述】:

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

使用 ElasticSearch,我可以做到这一点。但是,我想为此使用某种带有 Rails 的 ORM。

尝试使用轮胎教程进行一些测试,在 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)中返回属性名称?

如果不是轮胎,是否有其他解决方案可以做到这一点?

【问题讨论】:

  • 这看起来很适合 NoSQL,试试 CouchDB 或 Mongo。它会更灵活,而不是破解 SQL。
  • 嗯,ElasticSearch 是 NoSQL ...
  • @rado:将elasticsearch用于概述的目的是绝对合法的。而且,原作者从来没有说过要“破解SQL”的意图,从他发布的代码中也看不出来。
  • @Dmytro i 不适用于 ElasticSearch。但是如果你想要没有模式的对象,NoSQL 更可取,因为整个数据都是序列化的,你可以搜索所有属性。
  • @karmi 对我不确定的答案感到抱歉,我知道这是合法的。我只想回答 nosql 对于这个问题会更实用

标签: ruby-on-rails elasticsearch tire


【解决方案1】:

不太确定你在这里做什么,但 Tyre 确实提供了一个替代 ActiveRecord 集成的插件,只是在你的课堂上include Tire::Model::Persistence。您还可以定义属性(使用映射、类型转换、默认值等):

class Article

  include Tire::Model::Persistence

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

end

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

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

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

【讨论】:

  • 谢谢,看来我需要的是持久性。应该始终阅读自述文件的底部:)
  • 那么答案是否保证至少可以接受它?
猜你喜欢
  • 1970-01-01
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-11
  • 1970-01-01
  • 2012-06-10
  • 1970-01-01
相关资源
最近更新 更多