Sha256: 1ad0c6abba20073ef19ad3fe9af71268a66f6b9242a9d8d2a1c120ebbbba6483

Contents?: true

Size: 1.21 KB

Versions: 3

Compression:

Stored size: 1.21 KB

Contents

module Searchable
  extend ActiveSupport::Concern

  included do
    include Elasticsearch::Model
    include Elasticsearch::Model::Callbacks

    # Set up the mapping
    #
    settings index: { number_of_shards: 1, number_of_replicas: 0 } do
      mapping do
        indexes :title,      analyzer: 'snowball'
        indexes :created_at, type: 'date'

        indexes :authors do
          indexes :first_name
          indexes :last_name
            indexes :full_name, type: 'text' do
            indexes :raw, type: 'keyword'
          end
        end

        indexes :categories, type: 'keyword'

        indexes :comments, type: 'nested' do
          indexes :text
          indexes :author
        end
      end
    end

    # Customize the JSON serialization for Elasticsearch
    #
    def as_indexed_json(options={})
      {
          title: title,
          text:  text,
          categories: categories.map(&:title),
          authors:    authors.as_json(methods: [:full_name], only: [:full_name, :first_name, :last_name]),
          comments:   comments.as_json(only: [:text, :author])
      }
    end

    # Update document in the index after touch
    #
    after_touch() { __elasticsearch__.index_document }
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
elasticsearch-model-6.1.2 spec/support/app/searchable.rb
elasticsearch-model-6.1.1 spec/support/app/searchable.rb
elasticsearch-model-6.1.0 spec/support/app/searchable.rb