Module: Chewy::Index::Mapping::ClassMethods
- Defined in:
- lib/chewy/index/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 index.
-
#mappings_hash ⇒ Object
Returns compiled mappings hash for current type.
-
#root(**options) ⇒ Object
Defines root object for mapping and is optional for index definition.
-
#supports_outdated_sync? ⇒ true, false
Check whether the type has outdated_sync_field defined with a simple value.
-
#template(*args, **options) ⇒ 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
147 148 149 |
# File 'lib/chewy/index/mapping.rb', line 147 def agg(name, &block) self._agg_defs = _agg_defs.merge(name => block) end |
#field(*args, **options, &block) ⇒ Object
Defines mapping field for index
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:
124 125 126 127 128 129 130 |
# File 'lib/chewy/index/mapping.rb', line 124 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
180 181 182 |
# File 'lib/chewy/index/mapping.rb', line 180 def mappings_hash root.mappings_hash end |
#root(**options) ⇒ Object
Defines root object for mapping and is optional for index definition. Use it only if you need to pass options for root object mapping, such as ‘date_detection` or `dynamic_date_formats`
35 36 37 38 39 40 |
# File 'lib/chewy/index/mapping.rb', line 35 def root(**) self.root_object ||= Chewy::Fields::Root.new(:root, **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.
187 188 189 190 |
# File 'lib/chewy/index/mapping.rb', line 187 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, **options) ⇒ 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}`.
173 174 175 |
# File 'lib/chewy/index/mapping.rb', line 173 def template(*args, **) root.dynamic_template(*args, **) end |