Field data types

edit

Elasticsearch supports a number of different data types for the fields in a document:

Core data types

edit
string
text and keyword
Numeric
long, integer, short, byte, double, float, half_float, scaled_float
Date
date
Date nanoseconds
date_nanos
Boolean
boolean
Binary
binary
Range
integer_range, float_range, long_range, double_range, date_range, ip_range

Complex data types

edit
Object
object for single JSON objects
Nested
nested for arrays of JSON objects

Geo data types

edit
Geo-point
geo_point for lat/lon points
Geo-shape
geo_shape for complex shapes like polygons

Specialised data types

edit
IP
ip for IPv4 and IPv6 addresses
Completion data type
completion to provide auto-complete suggestions
Token count
token_count to count the number of tokens in a string
mapper-murmur3
murmur3 to compute hashes of values at index-time and store them in the index
mapper-annotated-text
annotated-text to index text containing special markup (typically used for identifying named entities)
Percolator
Accepts queries from the query-dsl
Join
Defines parent/child relation for documents within the same index
Rank feature
Record numeric feature to boost hits at query time.
Rank features
Record numeric features to boost hits at query time.
Dense vector
Record dense vectors of float values.
Sparse vector
Record sparse vectors of float values.
Search-as-you-type
A text-like field optimized for queries to implement as-you-type completion
Alias
Defines an alias to an existing field.
Flattened
Allows an entire JSON object to be indexed as a single field.
Shape
shape for arbitrary cartesian geometries.
Histogram
histogram for pre-aggregated numerical values for percentiles aggregations.
Constant keyword
Specialization of keyword for the case when all documents have the same value.

Arrays

edit

In Elasticsearch, arrays do not require a dedicated field data type. Any field can contain zero or more values by default, however, all values in the array must be of the same data type. See Arrays.

Multi-fields

edit

It is often useful to index the same field in different ways for different purposes. For instance, a string field could be mapped as a text field for full-text search, and as a keyword field for sorting or aggregations. Alternatively, you could index a text field with the standard analyzer, the english analyzer, and the french analyzer.

This is the purpose of multi-fields. Most data types support multi-fields via the fields parameter.