[discrete]
[[breaking_70_scripting_changes]]
=== Scripting changes

//NOTE: The notable-breaking-changes tagged regions are re-used in the
//Installation and Upgrade Guide

//tag::notable-breaking-changes[]

// end::notable-breaking-changes[]


[discrete]
==== getDate() and getDates() removed

Fields of type `long` and `date` had `getDate()` and `getDates()` methods
(for multi valued fields) to get an object with date specific helper methods
for the current doc value. In 5.3.0, `date` fields were changed to expose
this same date object directly when calling `doc["myfield"].value`, and
the getter methods for date objects were deprecated. These methods have
now been removed. Instead, use `.value` on `date` fields, or explicitly
parse `long` fields into a date object using
`Instance.ofEpochMillis(doc["myfield"].value)`.

[discrete]
==== Accessing missing document values will throw an error
`doc['field'].value` will throw an exception if
the document is missing a value for the field `field`.

To check if a document is missing a value, you can use
`doc['field'].size() == 0`.


[discrete]
[[script-errors-return-400-error-codes]]
==== Script errors will return as `400` error codes

Malformed scripts, either in search templates, ingest pipelines or search 
requests, return `400 - Bad request` while they would previously return
`500 - Internal Server Error`. This also applies for stored scripts.

[discrete]
==== getValues() removed

The `ScriptDocValues#getValues()` method is deprecated in 6.6 and will
be removed in 7.0. Use `doc["foo"]` in place of `doc["foo"].values`.
