ruby-on-rails - 创建一个无数据库的 rails 模型,作为在 elasticsearch 中索引数据的 View

标签 ruby-on-rails postgresql activerecord elasticsearch tire

我正面临一个我还无法解决的复杂问题。

我将 Rails 4(edge) 与 postgresql 9、ElasticSearch 0.20.6 和 gem Tire (0.5.7) 一起使用。
我有多个链接在一起的表。例如:

代理有很多客户
客户有很多项目
项目有很多文件

我的目标是能够以两种方式索引文件:

  • 首先有一个索引,它只允许在所有文件中轻松快速地搜索。我仅通过使用轮胎就成功地做到了。我的索引有一个类型"file",它就像一个魅力。
  • 我想创建的另一个索引将包含一些文件信息,还有一些客户端和代理的属性。这是一个外部工具,它能够根据项目类别或客户位置等标准获取最佳文件...

  • 当我使用 postgresql 时,我想我可以 do a database view并从那里索引数据。我不确定这样做是否很好,尽管因为 View 会非常复杂,有多个连接。另外,我担心任何更新都会触发完整的数据库重新索引。

    我想知道是否有办法做一个纯轮胎模型并轻松触发它的任何链接表上的索引更新。
    例如,我将索引类型为 files_front 的数据。 .我会有一个模型FilesFront其中has_one :file每次我更新文件或任何父文件时,所有受影响的文件都会在 ES 中看到它们的值更新。

    我真的不确定如何做到这一点,所以欢迎任何建议。

    最佳答案

    拥有一个单独的、无表的或独立的模型是一个很好的解决方案。我认为这里的问题是连接 FileFront类到系统的其余部分。实际上,每当您更新 File或任何相关的Client etc. 对象,您需要更新 FileFront目的。

    您实际上可以使用 Model::Persistence到那个。所以对于每个 File你会有一个关联的 FrontFile ,您将在 File 中将其组装为 JSON并在 after_save 中创建/更新打回来。棘手的部分是确保对父对象的更改传播到文件,反之亦然。

    关于ruby-on-rails - 创建一个无数据库的 rails 模型,作为在 elasticsearch 中索引数据的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15972942/

    相关文章:

    ruby-on-rails - 具有非 HTTP 访问权限的 Rails 应用

    ruby-on-rails - 如何配置与非 ActiveRecord 模型的 has_many 关联

    ruby-on-rails - 对如何安装 Rails 插件感到困惑

    sql - Postgres - 聚合分钟到小时

    ruby-on-rails - 序列化我的哈希时,ActiveRecord 将符号键转换为字符串

    ruby-on-rails - 将ActiveRecord对象与Rspec进行比较

    ruby-on-rails - 如何取消初始化/取消定义 Ruby 中的变量,这样我就不会在控制台中收到警告?

    ruby-on-rails - 如何从初始化程序访问Rails记录器?

    ruby-on-rails - 从数据映射器中的 PostgreSQL 二进制列中删除限制

    postgresql jsonb 在对象中查找键