Skip to content

[7.x] [DOCS] Move source filtering examples (#57689) #57695

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 4, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions docs/reference/redirects.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -896,4 +896,9 @@ For search examples, see <<run-a-search>>.
==== From / size

See <<paginate-search-results>>.

[role="exclude",id="request-body-search-source-filtering"]
==== Source filtering

See <<search-fields>>.
////
4 changes: 3 additions & 1 deletion docs/reference/search/request/from-size.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@ GET /_search
"from": 5,
"size": 20,
"query": {
"term": { "user": "kimchy" }
"term": {
"user.id": "8a4f500d"
}
}
}
----
Expand Down
69 changes: 1 addition & 68 deletions docs/reference/search/request/source-filtering.asciidoc
Original file line number Diff line number Diff line change
@@ -1,71 +1,4 @@
[[request-body-search-source-filtering]]
==== Source filtering


Allows to control how the `_source` field is returned with every hit.

By default operations return the contents of the `_source` field unless
you have used the `stored_fields` parameter or if the `_source` field is disabled.

You can turn off `_source` retrieval by using the `_source` parameter:

To disable `_source` retrieval set to `false`:

[source,console]
--------------------------------------------------
GET /_search
{
"_source": false,
"query" : {
"term" : { "user" : "kimchy" }
}
}
--------------------------------------------------

The `_source` also accepts one or more wildcard patterns to control what parts of the `_source` should be returned:

For example:

[source,console]
--------------------------------------------------
GET /_search
{
"_source": "obj.*",
"query" : {
"term" : { "user" : "kimchy" }
}
}
--------------------------------------------------

Or

[source,console]
--------------------------------------------------
GET /_search
{
"_source": [ "obj1.*", "obj2.*" ],
"query" : {
"term" : { "user" : "kimchy" }
}
}
--------------------------------------------------

Finally, for complete control, you can specify both `includes` and `excludes`
patterns. If `includes` is not empty, then only fields that match one of the
patterns in `includes` but none of the patterns in `excludes` are provided in
`_source`. If `includes` is empty, then all fields are provided in `_source`,
except for those that match a pattern in `excludes`.

[source,console]
--------------------------------------------------
GET /_search
{
"_source": {
"includes": [ "obj1.*", "obj2.*" ],
"excludes": [ "*.description" ]
},
"query" : {
"term" : { "user" : "kimchy" }
}
}
--------------------------------------------------
See <<search-fields>>.
89 changes: 86 additions & 3 deletions docs/reference/search/search-fields.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,92 @@
By default, each hit in the search response includes the document
<<mapping-source-field,`_source`>>, which is the entire JSON object that was
provided when indexing the document. If you only need certain fields in the
search response, you can use
<<request-body-search-source-filtering,source filtering>> to restrict what
parts of the source are returned.
search response, you can use the
<<request-body-search-source-filtering,`_source`>> parameter to restrict what
parts of the source are returned. This is called _source filtering_.

.*Example*
[%collapsible]
====
The following search API request sets the `_source` request body parameter to
`false`. The document source is not included in the response.

[source,console]
----
GET /_search
{
"_source": false,
"query": {
"term": {
"user.id": "8a4f500d"
}
}
}
----

To return only a subset of source fields, specify a wildcard (`*`) pattern in
the `_source` parameter. The following search API request returns the source for
only the `obj` field and its properties.

[source,console]
----
GET /_search
{
"_source": "obj.*",
"query": {
"term": {
"user.id": "8a4f500d"
}
}
}
----

You can also specify an array of wildcard patterns in the `_source` field. The
following search API request returns the source for only the `obj1` and
`obj2` fields and their properties.

[source,console]
----
GET /_search
{
"_source": [ "obj1.*", "obj2.*" ],
"query": {
"term": {
"user.id": "8a4f500d"
}
}
}
----

For finer control, you can specify an object containing arrays of `includes` and
`excludes` patterns in the `_source` parameter.

If the `includes` property is specified, only source fields that match one of
its patterns are returned. You can exclude fields from this subset using the
`excludes` property.

If the `includes` property is not specified, the entire document source is
returned, excluding any fields that match a pattern in the `excludes` property.

The following search API request returns the source for only the `obj1` and
`obj2` fields and their properties, excluding any child `description` fields.

[source,console]
----
GET /_search
{
"_source": {
"includes": [ "obj1.*", "obj2.*" ],
"excludes": [ "*.description" ]
},
"query": {
"term": {
"user.id": "8a4f500d"
}
}
}
----
====

Returning fields using only the document source has some limitations:

Expand Down