Skip to content
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

[DOCS] Add examples to the mapping docs #45520

Merged
merged 5 commits into from
Aug 19, 2019
Merged
Changes from 2 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
167 changes: 141 additions & 26 deletions docs/reference/mapping.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -123,44 +123,159 @@ You can create field mappings when you
fields to an existing index with the <<indices-put-mapping,PUT mapping API>>.

[float]
== Updating existing field mappings
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[[create-mapping]]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the section above on "Explicit Mappings", we reference external API pages for 'create index' and 'put mapping'. Do we instead want to link to the sections below since it's nice to stay within a one page while reading up on a topic?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great idea! Added with cbe9827.

== Create an index with an explicit mapping

Other than where documented, *existing field mappings cannot be
updated*. Changing the mapping would mean invalidating already indexed
documents. Instead, you should create a new index with the correct mappings
and <<docs-reindex,reindex>> your data into that index. If you only wish
to rename a field and not change its mappings, it may make sense to introduce
an <<alias, `alias`>> field.
You can use the <<indices-create-index,create index>> API to create a new index
with an explicit mapping.

[source,js]
----
PUT my-index
{
"mappings": {
"properties": {
"age": { "type": "integer" }, <1>
"email": { "type": "keyword" }, <2>
"name": { "type": "text" } <3>
}
}
}
----
// CONSOLE

<1> Creates `age`, an <<number,`integer`>> field
<2> Creates `email`, a <<keyword,`keyword`>> field
<3> Creates `name`, a <<text,`text`>> field

[float]
== Example mapping
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[[add-field-mapping]]
== Add a field to an existing mapping

A mapping can be specified when creating an index, as follows:
You can use the <<indices-put-mapping, put mapping>> API to add one or more new
fields to an existing index.

The following example adds `employee-id`, a `keyword` field with an
<<mapping-index,`index`>> mapping parameter value of `false`. This means values
for the `employee-id` field are stored but not indexed or available for search.

[source,js]
---------------------------------------
PUT my_index <1>
----
PUT /my-index/_mapping
{
"mappings": {
"properties": { <2>
"title": { "type": "text" }, <3>
"name": { "type": "text" }, <4>
"age": { "type": "integer" }, <5>
"created": {
"type": "date", <6>
"format": "strict_date_optional_time||epoch_millis"
"properties": {
"employee-id": {
"type": "keyword",
"index": false
}
}
}
----
// CONSOLE
// TEST[continued]

[float]
[[update-mapping]]
== Update the mapping of a field
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this actually be a subsection of "Add a field to an existing mapping"? As it's currently formatted, it's at the same level as other API examples, but it seems more like an important note about the limitations of 'put mapping'.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Although they use the same mechanism (the put mapping API), my thought here was that users could see "adding a field" and "updating an existing field" as two separate tasks.

However, I could also see this as a subheading. I incremented the heading with cbe9827.


You can't change the mapping of an existing field, with the following
exceptions:

* You can add new <<properties,properties>> to an <<object,`object`>> field.
* You can use the <<multi-fields,`field`>> mapping parameter to enable
multi-fields.
* You can change the value of the <<ignore-above,`ignore_above`>> mapping
parameter.

Changing the mapping of an existing field could invalidate data that's already
indexed. If you need to change the mapping of a field, create a new index with
the correct mappings and <<docs-reindex,reindex>> your data into that index. If
you only want to rename a field, consider adding an <<alias, `alias`>> field.

[float]
[[view-mapping]]
== View the mapping of an index

You can use the <<indices-get-mapping, get mapping>> API to view the mapping of
an existing index.

[source,js]
----
GET /my-index/_mapping
----
// CONSOLE
// TEST[continued]

The API returns the following response:

[source,js]
----
{
"my-index" : {
"mappings" : {
"properties" : {
"age" : {
"type" : "integer"
},
"email" : {
"type" : "keyword"
},
"employee-id" : {
"type" : "keyword",
"index" : false
},
"name" : {
"type" : "text"
}
}
}
}
}
---------------------------------------
----
// TESTRESPONSE


[float]
[[view-field-mapping]]
== View the mapping of specific fields

If you only want to view the mapping of one or more specific fields, you can use
the <<indices-get-field-mapping, get field mapping>> API.

This is useful if you don't need the complete mapping of an index or your index
contains a large number of fields.

The following request retrieves the mapping for the `employee-id` field.

[source,js]
----
GET /my-index/_mapping/field/employee-id
----
// CONSOLE
<1> Create an index called `my_index`.
<2> Specify the fields or _properties_ in the mapping.
<3> Specify that the `title` field contains `text` values.
<4> Specify that the `name` field contains `text` values.
<5> Specify that the `age` field contains `integer` values.
<6> Specify that the `created` field contains `date` values in two possible formats.
// TEST[continued]

The API returns the following response:

[source,js]
----
{
"my-index" : {
"mappings" : {
"employee-id" : {
"full_name" : "employee-id",
"mapping" : {
"employee-id" : {
"type" : "keyword",
"index" : false
}
}
}
}
}
}

----
// TESTRESPONSE

--

Expand Down