Skip to content

Commit 1bb505c

Browse files
committed
Clarify the settings around limiting nested mappings. (#42686)
* Previously, we mentioned multiple times that each nested object was indexed as its own document. This is repetitive, and is also a bit confusing in the context of `index.mapping.nested_fields.limit`, as that applies to the number of distinct `nested` types in the mappings, not the number of nested objects. We now just describe the issue once at the beginning of the section, to illustrate why `nested` types can be expensive. * Reference the ongoing example to clarify the meaning of the two settings. Addresses #28363.
1 parent c181635 commit 1bb505c

File tree

2 files changed

+30
-22
lines changed

2 files changed

+30
-22
lines changed

docs/reference/mapping.asciidoc

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -87,15 +87,11 @@ causing a mapping explosion:
8787
`2`, etc. The default is `20`.
8888

8989
`index.mapping.nested_fields.limit`::
90-
The maximum number of `nested` fields in an index, defaults to `50`.
91-
Indexing 1 document with 100 nested fields actually indexes 101 documents
92-
as each nested document is indexed as a separate hidden document.
90+
The maximum number of distinct `nested` mappings in an index, defaults to `50`.
9391

9492
`index.mapping.nested_objects.limit`::
95-
The maximum number of `nested` json objects within a single document across
96-
all nested fields, defaults to 10000. Indexing one document with an array of
97-
100 objects within a nested field, will actually create 101 documents, as
98-
each nested object will be indexed as a separate hidden document.
93+
The maximum number of `nested` JSON objects within a single document across
94+
all nested types, defaults to 10000.
9995

10096
`index.mapping.field_name_length.limit`::
10197
Setting for the maximum length of a field name. The default value is

docs/reference/mapping/types/nested.asciidoc

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -193,20 +193,32 @@ phase. Instead, highlighting needs to be performed via
193193
194194
=============================================
195195

196-
[[limit-number-nested-fields]]
197-
==== Limiting the number of `nested` fields
198-
199-
Indexing a document with 100 nested fields actually indexes 101 documents as each nested
200-
document is indexed as a separate document. To safeguard against ill-defined mappings
201-
the number of nested fields that can be defined per index has been limited to 50. See
202-
<<mapping-limit-settings>>.
203-
204-
[[limit-nested-json-objects-number]]
205-
==== Limiting the number of `nested` json objects
206-
Indexing a document with an array of 100 objects within a nested field, will actually
207-
create 101 documents, as each nested object will be indexed as a separate document.
208-
To prevent out of memory errors when a single document contains too many nested json
209-
objects, the number of nested json objects that a single document may contain across all fields
210-
has been limited to 10000. See <<mapping-limit-settings>>.
196+
[float]
197+
=== Limits on `nested` mappings and objects
198+
199+
As described earlier, each nested object is indexed as a separate document under the hood.
200+
Continuing with the example above, if we indexed a single document containing 100 `user` objects,
201+
then 101 Lucene documents would be created -- one for the parent document, and one for each
202+
nested object. Because of the expense associated with `nested` mappings, Elasticsearch puts
203+
settings in place to guard against performance problems:
204+
205+
`index.mapping.nested_fields.limit`::
206+
207+
The `nested` type should only be used in special cases, when arrays of objects need to be
208+
queried independently of each other. To safeguard against poorly designed mappings, this setting
209+
limits the number of unique `nested` types per index. In our example, the `user` mapping would
210+
count as only 1 towards this limit. Defaults to 50.
211+
212+
`index.mapping.nested_objects.limit`::
213+
214+
This setting limits the number of nested objects that a single document may contain across all
215+
`nested` types, in order to prevent out of memory errors when a document contains too many nested
216+
objects. To illustrate how the setting works, say we added another `nested` type called `comments`
217+
to our example mapping above. Then for each document, the combined number of `user` and `comment`
218+
objects it contains must be below the limit. Defaults to 10000.
219+
220+
Additional background on these settings, including information on their default values, can be found
221+
in <<mapping-limit-settings>>.
222+
211223

212224

0 commit comments

Comments
 (0)