[[upgrade-assistant-api-default-field]]
=== Add default field API
++++
<titleabbrev>Add default field</titleabbrev>
++++

experimental[] In {es} 7.0 and later, some query types, such as Simple Query String, have a limit to the number of fields they can query against. 
To configure the cap in {es}, set the `indices.query.bool.max_clause_count` cluster setting, which is 1024 by default.

For indices with more fields than the cap, add the `index.query.default_field` index setting to inform {es} which 
fields to use by default when no field is specified for a query. Use the add default field API to add the `index.query.default_field` setting to an {es} index.

[[upgrade-assistant-api-default-field-request]]
==== Request

To add the `index.query.default_field` setting to an {es} index, submit a POST request to `/api/upgrade_assistant/add_query_default_field/<index>`:

[source,js]
--------------------------------------------------
POST /api/upgrade_assistant/add_query_default_field/myIndex
{
  "fieldTypes": ["text", "keyword"], <1>
  "otherFields": ["myField.*"] <2>
}
--------------------------------------------------
// KIBANA

<1> A required array of {es} field types that generate the list of fields.
<2> An optional array of additional field names, dot-deliminated.

To add the `index.query.default_field` index setting to the specified index, {kib} generates an array of all fields from the index mapping.
The fields contain the types specified in `fieldTypes`. {kib} appends any other fields specified in `otherFields` to the array of default fields.

[[upgrade-assistant-api-default-field-response-codes]]
==== Response codes

`200`::
  Indicates a successful call.

 `400`::
  Indicates that the index already has the `index.query.default_field` setting. No changes are made to the index. 

[[upgrade-assistant-api-default-field-response-body]]
==== Response body

The response body contains a JSON structure, similar to the following:

[source,js]
--------------------------------------------------
{
  "acknowledged": true
}
--------------------------------------------------

[[upgrade-assistant-api-default-field-example]]
==== Example

Your index contains following mappings:

[source,js]
--------------------------------------------------
GET /myIndex/_mappings
{
  "myIndex": {
    "mappings": {
      "properties": {
        "field1": { "type": "text" },
        "field2": { "type": "float" },
        "nestedfield": {
          "properties": {
            "field3": { "type": "keyword" },
            "field4": { "type": "long" },
          }
        }
      }
    }
  }
}
--------------------------------------------------
// CONSOLE

Make the following request to {kib}:

[source,js]
--------------------------------------------------
POST /api/upgrade_assistant/add_query_default_field/myIndex
{
  "fieldTypes": ["text", "long"],
  "otherFields": ["field2"]
}
--------------------------------------------------
// KIBANA

The API returns the following:

[source,js]
--------------------------------------------------
GET /myIndex/_settings?flat_settings=true
{
  "myIndex": {
    "settings": {
      "index.query.default_field": [
        "field1",
        "nestedfield.field4",
        "field2",
      ]
    }
  }
}
--------------------------------------------------
// CONSOLE

{kib} generates the `field1` and `nestedfield.field4` values based on the specified `fieldTypes`, then appends the `otherFields` to the array.
