|
@@ -1,24 +1,31 @@
|
|
|
[[dynamic]]
|
|
|
=== `dynamic`
|
|
|
|
|
|
-By default, fields can be added _dynamically_ to a document, or to
|
|
|
-<<object,inner objects>> within a document, just by indexing a document
|
|
|
-containing the new field. For instance:
|
|
|
+When you index a document containing a new field, {es} <<dynamic-mapping,adds the field dynamically>> to a document or to inner objects within a document. The
|
|
|
+following document adds the string field `username`, the object field
|
|
|
+`name`, and two string fields under the `name` object:
|
|
|
|
|
|
[source,console]
|
|
|
---------------------------------------------------
|
|
|
-PUT my-index-000001/_doc/1 <1>
|
|
|
+----
|
|
|
+PUT my-index-000001/_doc/1
|
|
|
{
|
|
|
"username": "johnsmith",
|
|
|
- "name": {
|
|
|
+ "name": { <1>
|
|
|
"first": "John",
|
|
|
"last": "Smith"
|
|
|
}
|
|
|
}
|
|
|
|
|
|
GET my-index-000001/_mapping <2>
|
|
|
+----
|
|
|
+<1> Refer to fields under the `name` object as `name.first` and `name.last`.
|
|
|
+<2> Check the mapping to view changes.
|
|
|
+
|
|
|
+The following document adds two string fields: `email` and `name.middle`:
|
|
|
|
|
|
-PUT my-index-000001/_doc/2 <3>
|
|
|
+[source,console]
|
|
|
+----
|
|
|
+PUT my-index-000001/_doc/2
|
|
|
{
|
|
|
"username": "marywhite",
|
|
|
"email": "mary@white.com",
|
|
@@ -29,35 +36,24 @@ PUT my-index-000001/_doc/2 <3>
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-GET my-index-000001/_mapping <4>
|
|
|
---------------------------------------------------
|
|
|
-
|
|
|
-<1> This document introduces the string field `username`, the object field
|
|
|
- `name`, and two string fields under the `name` object which can be
|
|
|
- referred to as `name.first` and `name.last`.
|
|
|
-<2> Check the mapping to verify the above.
|
|
|
-<3> This document adds two string fields: `email` and `name.middle`.
|
|
|
-<4> Check the mapping to verify the changes.
|
|
|
+GET my-index-000001/_mapping
|
|
|
+----
|
|
|
|
|
|
-The details of how new fields are detected and added to the mapping is explained in <<dynamic-mapping>>.
|
|
|
+TIP: Use the <<indices-put-mapping,PUT mapping API>> to update the `dynamic`
|
|
|
+setting on existing fields.
|
|
|
|
|
|
-The `dynamic` setting controls whether new fields can be added dynamically or
|
|
|
-not. It accepts three settings:
|
|
|
+[[dynamic-inner-objects]]
|
|
|
+==== Setting `dynamic` on inner objects
|
|
|
+<<object,Inner objects>> inherit the `dynamic` setting from their parent
|
|
|
+object or from the mapping type. In the following example, dynamic mapping is
|
|
|
+disabled at the type level, so no new top-level fields will be added
|
|
|
+dynamically.
|
|
|
|
|
|
-[horizontal]
|
|
|
-`true`:: Newly detected fields are added to the mapping. (default)
|
|
|
-`false`:: Newly detected fields are ignored. These fields will not be indexed so will not be searchable
|
|
|
- but will still appear in the `_source` field of returned hits. These fields will not be added
|
|
|
- to the mapping, new fields must be added explicitly.
|
|
|
-`strict`:: If new fields are detected, an exception is thrown and the document is rejected. New fields
|
|
|
- must be explicitly added to the mapping.
|
|
|
-
|
|
|
-The `dynamic` setting may be set at the mapping type level, and on each
|
|
|
-<<object,inner object>>. Inner objects inherit the setting from their parent
|
|
|
-object or from the mapping type. For instance:
|
|
|
+However, the `user.social_networks` object enables dynamic mapping, so you can
|
|
|
+add fields to this inner object.
|
|
|
|
|
|
[source,console]
|
|
|
---------------------------------------------------
|
|
|
+----
|
|
|
PUT my-index-000001
|
|
|
{
|
|
|
"mappings": {
|
|
@@ -68,8 +64,8 @@ PUT my-index-000001
|
|
|
"name": {
|
|
|
"type": "text"
|
|
|
},
|
|
|
- "social_networks": { <3>
|
|
|
- "dynamic": true,
|
|
|
+ "social_networks": {
|
|
|
+ "dynamic": true, <3>
|
|
|
"properties": {}
|
|
|
}
|
|
|
}
|
|
@@ -77,11 +73,23 @@ PUT my-index-000001
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
---------------------------------------------------
|
|
|
+----
|
|
|
|
|
|
-<1> Dynamic mapping is disabled at the type level, so no new top-level fields will be added dynamically.
|
|
|
+<1> Disables dynamic mapping at the type level.
|
|
|
<2> The `user` object inherits the type-level setting.
|
|
|
-<3> The `user.social_networks` object enables dynamic mapping, so new fields may be added to this inner object.
|
|
|
+<3> Enables dynamic mapping for this inner object.
|
|
|
|
|
|
-TIP: The `dynamic` setting can be updated on existing fields
|
|
|
-using the <<indices-put-mapping,PUT mapping API>>.
|
|
|
+[[dynamic-parameters]]
|
|
|
+==== Parameters for `dynamic`
|
|
|
+The `dynamic` parameter controls whether new fields are added dynamically, and
|
|
|
+accepts the following parameters:
|
|
|
+
|
|
|
+[horizontal]
|
|
|
+`true`:: New fields are added to the mapping (default).
|
|
|
+`runtime`:: New fields are added to the mapping as <<runtime,runtime fields>>.
|
|
|
+ These fields are not indexed, and are loaded from `_source` at query time.
|
|
|
+`false`:: New fields are ignored. These fields will not be indexed
|
|
|
+ or searchable, but will still appear in the `_source` field of returned hits. These fields will not be added
|
|
|
+ to the mapping, and new fields must be added explicitly.
|
|
|
+`strict`:: If new fields are detected, an exception is thrown and the document
|
|
|
+ is rejected. New fields must be explicitly added to the mapping.
|