elasticsearch_indexed_model.rb 680 Bytes
module ElasticsearchIndexedModel

  def self.included base
    base.send :include, Elasticsearch::Model
    base.class_eval do
      settings index: { number_of_shards: 1 } do
        mappings dynamic: 'false' do
          base::SEARCHABLE_FIELDS.each do |field, value|
            indexes field
          end
        end
        base.__elasticsearch__.client.indices.delete \
          index: base.index_name rescue nil
        base.__elasticsearch__.client.indices.create \
          index: base.index_name,
          body: {
            settings: base.settings.to_hash,
            mappings: base.mappings.to_hash
          }
      end
    end
    base.send :import
  end

end