ruby-on-rails - 将Elasticsearch索引添加到现有的Rails应用程序

标签 ruby-on-rails elasticsearch

先决条件:

  • Elasticsearch已启动并正在运行
  • 数据库已经充满了数据
  • Rails模型看起来像
    class Customer < ActiveRecord::Base
      include Elasticsearch::Model
      include Elasticsearch::Model::Callbacks
    end
    

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

    我的假设:
  • 对要添加到elasticsearch的每个模型执行以下rake任务,但仅在第一次
  • 时执行

    bundle exec rake environment elasticsearch:import:model CLASS='Customer'


  • 我将“Customer.import”添加到模型文件的最底部,以确保每次启动Rails应用程序时对模型进行索引。

  • 够了吗?即使我更改了模型的映射或添加了新字段,此方法也能正常工作吗?

    最佳答案

    添加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
    This is a very good article explainging everything,当然每次需要索引新字段时,都需要更新as_indexed_json方法并运行rake任务。再次重建索引。
  • 第三,在安装elasticsearch之前为已经拥有的数据建立索引,您可以创建一个rake任务,以对该import调用model方法来为该模型重新索引或创建新索引。
  • 关于ruby-on-rails - 将Elasticsearch索引添加到现有的Rails应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46513458/

    相关文章:

    mysql - 在 ruby 中获取时间间隔

    ruby-on-rails - merge 两个分支,一个使用 Postgres,另一个使用 SQLite3

    ruby-on-rails - Rails 部分和 HAML

    json - 通过Logstash将哈希数组转换为简单哈希

    elasticsearch - elasticsearch 'or'查询和过滤器之间的关系

    spring-boot - Spring Data Elastic - Java.Time.Instant 类 jackson 反序列化不起作用

    ruby-on-rails - NoMethodError(未定义的方法 `validate' 为真 :TrueClass)

    javascript - Nokogiri 可以解释 javascript 吗? - 网页抓取

    elasticsearch - 为什么添加日期范围过滤器会禁用aggs?

    elasticsearch - Kibana可视化-状态页面(如Nagios)