Module: Chewy::Type::Mapping::ClassMethods
- Defined in:
- lib/chewy/type/mapping.rb
Instance Method Summary collapse
-
#agg(name, &block) ⇒ Object
(also: #aggregation)
Defines an aggregation that can be bound to a query or filter.
-
#field(*args, **options, &block) ⇒ Object
Defines mapping field for current type.
-
#mappings_hash ⇒ Object
Returns compiled mappings hash for current type.
-
#root(**options) ⇒ Object
Defines root object for mapping and is optional for type definition.
-
#supports_outdated_sync? ⇒ true, false
Check whether the type has outdated_sync_field defined with a simple value.
-
#template(*args) ⇒ Object
(also: #dynamic_template)
Defines dynamic template in mapping root objects.
Instance Method Details
#agg(name, &block) ⇒ Object Also known as: aggregation
Defines an aggregation that can be bound to a query or filter
151 152 153 |
# File 'lib/chewy/type/mapping.rb', line 151 def agg(name, &block) self._agg_defs = _agg_defs.merge(name => block) end |
#field(*args, **options, &block) ⇒ Object
Defines mapping field for current type
The type
is optional and defaults to string
if not defined:
Also, multiple fields might be defined with one call and with the same options:
The only special option in the field definition
is :value
. If no :value
specified then just corresponding
method will be called for the indexed object. Also
:value
might be a proc or indexed object method name:
The proc evaluates inside the indexed object context if its arity is 0 and in present contexts if there is an argument:
If array was returned as value - it will be put in index as well.
Fields supports nesting in case of object
field type. If
user.quiz
will return an array of objects, then result index content
will be an array of hashes, if user.quiz
is not a collection association
then just values hash will be put in the index.
Nested fields are composed from nested objects:
Of course it is possible to define object fields contents dynamically but make sure evaluation proc returns hash:
The special case is multi_field. If type options and block are both present field is treated as a multi-field. In that case field composition changes satisfy elasticsearch rules:
127 128 129 130 131 132 133 |
# File 'lib/chewy/type/mapping.rb', line 127 def field(*args, **, &block) if args.size > 1 args.map { |name| field(name, **) } else (Chewy::Fields::Base.new(args.first, **), &block) end end |
#mappings_hash ⇒ Object
Returns compiled mappings hash for current type
185 186 187 |
# File 'lib/chewy/type/mapping.rb', line 185 def mappings_hash root.mappings_hash[type_name.to_sym].present? ? root.mappings_hash : {} end |
#root(**options) ⇒ Object
Defines root object for mapping and is optional for type
definition. Use it only if you need to pass options for root
object mapping, such as date_detection
or dynamic_date_formats
37 38 39 40 41 42 |
# File 'lib/chewy/type/mapping.rb', line 37 def root(**) self.root_object ||= Chewy::Fields::Root.new(type_name, **Chewy..merge()) root_object.(**) yield if block_given? root_object end |
#supports_outdated_sync? ⇒ true, false
Check whether the type has outdated_sync_field defined with a simple value.
192 193 194 195 |
# File 'lib/chewy/type/mapping.rb', line 192 def supports_outdated_sync? updated_at_field = root.child_hash[outdated_sync_field] if outdated_sync_field !!updated_at_field && updated_at_field.value.nil? end |
#template(*args) ⇒ Object Also known as: dynamic_template
Defines dynamic template in mapping root objects
Name for each template is generated with the following
rule: template_#!{dynamic_templates.size + 1}
.
178 179 180 |
# File 'lib/chewy/type/mapping.rb', line 178 def template(*args) root.dynamic_template(*args) end |