|
@@ -36,47 +36,10 @@ treated. Examples of meta-fields include the document's
|
|
|
|
|
|
Each mapping type contains a list of fields or `properties` pertinent to that
|
|
|
type. A `user` type might contain `title`, `name`, and `age` fields, while a
|
|
|
-`blogpost` type might contain `title`, `body`, `user_id` and `created`
|
|
|
-fields.
|
|
|
+`blogpost` type might contain `title`, `body`, `user_id` and `created` fields.
|
|
|
+Fields with the same name in different mapping types in the same index
|
|
|
+<<field-conflicts,must have the same mapping>>.
|
|
|
|
|
|
-The mapping for the above example could look like this:
|
|
|
-
|
|
|
-[source,js]
|
|
|
----------------------------------------
|
|
|
-PUT my_index <1>
|
|
|
-{
|
|
|
- "mappings": {
|
|
|
- "user": { <2>
|
|
|
- "_all": { "enabled": false }, <3>
|
|
|
- "properties": { <4>
|
|
|
- "title": { "type": "string" }, <5>
|
|
|
- "name": { "type": "string" }, <5>
|
|
|
- "age": { "type": "integer" } <5>
|
|
|
- }
|
|
|
- },
|
|
|
- "blogpost": { <2>
|
|
|
- "properties": { <4>
|
|
|
- "title": { "type": "string" }, <5>
|
|
|
- "body": { "type": "string" }, <5>
|
|
|
- "user_id": {
|
|
|
- "type": "string", <5>
|
|
|
- "index": "not_analyzed"
|
|
|
- },
|
|
|
- "created": {
|
|
|
- "type": "date", <5>
|
|
|
- "format": "strict_date_optional_time||epoch_millis"
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
----------------------------------------
|
|
|
-// AUTOSENSE
|
|
|
-<1> Create an index called `my_index`.
|
|
|
-<2> Add mapping types called `user` and `blogpost`.
|
|
|
-<3> Disable the `_all` <<mapping-fields,meta field>> for the `user` mapping type.
|
|
|
-<4> Specify fields or _properties_ in each mapping type.
|
|
|
-<5> Specify the data `type` and mapping for each field.
|
|
|
|
|
|
[float]
|
|
|
== Field datatypes
|
|
@@ -90,32 +53,6 @@ Each field has a data `type` which can be:
|
|
|
* or a specialised type like <<geo-point,`geo_point`>>,
|
|
|
<<geo-shape,`geo_shape`>>, or <<search-suggesters-completion,`completion`>>.
|
|
|
|
|
|
-[IMPORTANT]
|
|
|
-.Fields are shared across mapping types
|
|
|
-=========================================
|
|
|
-
|
|
|
-Mapping types are used to group fields, but the fields in each mapping type
|
|
|
-are not independent of each other. Fields with:
|
|
|
-
|
|
|
-* the _same name_
|
|
|
-* in the _same index_
|
|
|
-* in _different mapping types_
|
|
|
-* map to the _same field_ internally,
|
|
|
-* and *must have the same mapping*.
|
|
|
-
|
|
|
-The `title` field exists in both the `user` and `blogpost` mapping types and
|
|
|
-so must have exactly the same mapping in each type. The only exceptions to
|
|
|
-this rule are the <<copy-to>>, <<dynamic>>, <<enabled>>, <<ignore-above>>,
|
|
|
-<<include-in-all>>, and <<properties>> parameters, which may have different
|
|
|
-settings per field.
|
|
|
-
|
|
|
-Usually, fields with the same name also contain the same type of data, so
|
|
|
-having the same mapping is not a problem. When conflicts do arise, these can
|
|
|
-be solved by choosing more descriptive names, such as `user_title` and
|
|
|
-`blog_title`.
|
|
|
-
|
|
|
-=========================================
|
|
|
-
|
|
|
[float]
|
|
|
== Dynamic mapping
|
|
|
|
|
@@ -148,6 +85,74 @@ updated*. Changing the mapping would mean invalidating already indexed
|
|
|
documents. Instead, you should create a new index with the correct mappings
|
|
|
and reindex your data into that index.
|
|
|
|
|
|
+[[field-conflicts]]
|
|
|
+[float]
|
|
|
+== Fields are shared across mapping types
|
|
|
+
|
|
|
+Mapping types are used to group fields, but the fields in each mapping type
|
|
|
+are not independent of each other. Fields with:
|
|
|
+
|
|
|
+* the _same name_
|
|
|
+* in the _same index_
|
|
|
+* in _different mapping types_
|
|
|
+* map to the _same field_ internally,
|
|
|
+* and *must have the same mapping*.
|
|
|
+
|
|
|
+If a `title` field exists in both the `user` and `blogpost` mapping types, the
|
|
|
+`title` fields must have exactly the same mapping in each type. The only
|
|
|
+exceptions to this rule are the <<copy-to>>, <<dynamic>>, <<enabled>>,
|
|
|
+<<ignore-above>>, <<include-in-all>>, and <<properties>> parameters, which may
|
|
|
+have different settings per field.
|
|
|
+
|
|
|
+Usually, fields with the same name also contain the same type of data, so
|
|
|
+having the same mapping is not a problem. When conflicts do arise, these can
|
|
|
+be solved by choosing more descriptive names, such as `user_title` and
|
|
|
+`blog_title`.
|
|
|
+
|
|
|
+[float]
|
|
|
+== Example mapping
|
|
|
+
|
|
|
+A mapping for the example described above could be specified when creating the
|
|
|
+index, as follows:
|
|
|
+
|
|
|
+[source,js]
|
|
|
+---------------------------------------
|
|
|
+PUT my_index <1>
|
|
|
+{
|
|
|
+ "mappings": {
|
|
|
+ "user": { <2>
|
|
|
+ "_all": { "enabled": false }, <3>
|
|
|
+ "properties": { <4>
|
|
|
+ "title": { "type": "string" }, <5>
|
|
|
+ "name": { "type": "string" }, <5>
|
|
|
+ "age": { "type": "integer" } <5>
|
|
|
+ }
|
|
|
+ },
|
|
|
+ "blogpost": { <2>
|
|
|
+ "properties": { <4>
|
|
|
+ "title": { "type": "string" }, <5>
|
|
|
+ "body": { "type": "string" }, <5>
|
|
|
+ "user_id": {
|
|
|
+ "type": "string", <5>
|
|
|
+ "index": "not_analyzed"
|
|
|
+ },
|
|
|
+ "created": {
|
|
|
+ "type": "date", <5>
|
|
|
+ "format": "strict_date_optional_time||epoch_millis"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+---------------------------------------
|
|
|
+// AUTOSENSE
|
|
|
+<1> Create an index called `my_index`.
|
|
|
+<2> Add mapping types called `user` and `blogpost`.
|
|
|
+<3> Disable the `_all` <<mapping-fields,meta field>> for the `user` mapping type.
|
|
|
+<4> Specify fields or _properties_ in each mapping type.
|
|
|
+<5> Specify the data `type` and mapping for each field.
|
|
|
+
|
|
|
+
|
|
|
--
|
|
|
|
|
|
include::mapping/types.asciidoc[]
|