将Elasticsearch索引添加到现有Rails应用程序

时间:2017-10-01 14:39:35

标签: ruby-on-rails elasticsearch

先决条件:

  • Elasticsearch已启动并正在运行
  • 数据库已填充数据
  • Rails模型看起来像

    class Customer < ActiveRecord::Base
      include Elasticsearch::Model
      include Elasticsearch::Model::Callbacks
    end
    

问题:索引模型的正确方法是什么?

我的假设:

  1. 为我要添加到elasticsearch的每个模型执行以下rake任务,但只是第一次
  2.   

    bundle exec rake environment elasticsearch:import:model   CLASS =&#39;顾客&#39;

    1. 我添加&#34; Customer.import&#34;在模型文件的最底部,以确保每次启动rails应用程序时都会对模型编制索引。
    2. 这够了吗?即使我更改了模型的映射或添加了新字段,这是否有效?

1 个答案:

答案 0 :(得分:1)

添加elasticsearch做现有模型:

  • 首先添加callbacks module将负责索引任何新记录或更新已添加的记录include Elasticsearch::Model::Callbacks

  • 其次,您需要通过在模型as_indexed_json

    中定义以下方法来指定要在该模型中编入索引的字段

    def as_indexed_json(options={}) as_json( only: [:first_name, :last_name, :address], include: [products: { only: :name }] ) end

    https://github.com/rtshome/ansible_pgsql当然,每次需要索引新字段时,都需要更新as_indexed_json方法并运行rake任务。重建索引agaain。

  • 第三,在安装elasticsearch之前为已经拥有的数据编制索引,您可以创建一个rake任务,以便在import上调用model方法重新编制索引或创建新索引对于那个模型。