[[search-field-caps]]
=== Field Capabilities API

Allows you to retrieve the capabilities of fields among multiple indices.

[source,console]
--------------------------------------------------
GET /_field_caps?fields=rating
--------------------------------------------------


[[search-field-caps-api-request]]
==== {api-request-title}

`GET /_field_caps` 

`POST /_field_caps` 

`GET /<index>/_field_caps` 

`POST /<index>/_field_caps`


[[search-field-caps-api-desc]]
==== {api-description-title}


The field capabilities API returns the information about the capabilities of 
fields among multiple indices.


[[search-field-caps-api-path-params]]
==== {api-path-parms-title}

include::{docdir}/rest-api/common-parms.asciidoc[tag=index]


[[search-field-caps-api-query-params]]
==== {api-query-parms-title}

include::{docdir}/rest-api/common-parms.asciidoc[tag=allow-no-indices]
+
Defaults to `true`.

include::{docdir}/rest-api/common-parms.asciidoc[tag=expand-wildcards]
+
--
Defaults to `open`.
--

include::{docdir}/rest-api/common-parms.asciidoc[tag=fields]

include::{docdir}/rest-api/common-parms.asciidoc[tag=index-ignore-unavailable]

`include_unmapped`::
  (Optional, boolean) If `true`, unmapped fields are included in the response. 
  Defaults to `false`.


[[search-field-caps-api-response-body]]
==== {api-response-body-title}
  


`searchable`::
  Whether this field is indexed for search on all indices.

`aggregatable`::
  Whether this field can be aggregated on all indices.

`indices`::
  The list of indices where this field has the same type, or null if all indices 
  have the same type for the field.

`non_searchable_indices`::
  The list of indices where this field is not searchable, or null if all indices 
  have the same definition for the field.

`non_aggregatable_indices`::
  The list of indices where this field is not aggregatable, or null if all 
  indices have the same definition for the field.

`meta`::
  Merged metadata across all indices as a map of string keys to arrays of values.
  A value length of 1 indicates that all indices had the same value for this key,
  while a length of 2 or more indicates that not all indices had the same value
  for this key.


[[search-field-caps-api-example]]
==== {api-examples-title}


The request can be restricted to specific indices:

[source,console]
--------------------------------------------------
GET twitter/_field_caps?fields=rating
--------------------------------------------------
// TEST[setup:twitter]


The next example API call requests information about the `rating` and the 
`title` fields:

[source,console]
--------------------------------------------------
GET _field_caps?fields=rating,title
--------------------------------------------------

The API returns the following response:

[source,console-result]
--------------------------------------------------
{
    "indices": ["index1", "index2", "index3", "index4", "index5"],
    "fields": {
        "rating": { <1>
            "long": {
                "searchable": true,
                "aggregatable": false,
                "indices": ["index1", "index2"],
                "non_aggregatable_indices": ["index1"] <2>
            },
            "keyword": {
                "searchable": false,
                "aggregatable": true,
                "indices": ["index3", "index4"],
                "non_searchable_indices": ["index4"] <3>
            }
        },
        "title": { <4>
            "text": {
                "searchable": true,
                "aggregatable": false

            }
        }
    }
}
--------------------------------------------------
// TESTRESPONSE[skip:historically skipped]

<1> The field `rating` is defined as a long in `index1` and `index2`
and as a `keyword` in `index3` and `index4`.
<2> The field `rating` is not aggregatable in `index1`.
<3> The field `rating` is not searchable in `index4`.
<4> The field `title` is defined as `text` in all indices.


By default unmapped fields are ignored. You can include them in the response by
adding a parameter called `include_unmapped` in the request:

[source,console]
--------------------------------------------------
GET _field_caps?fields=rating,title&include_unmapped
--------------------------------------------------

In which case the response will contain an entry for each field that is present 
in some indices but not all:

[source,console-result]
--------------------------------------------------
{
    "indices": ["index1", "index2", "index3"],
    "fields": {
        "rating": {
            "long": {
                "searchable": true,
                "aggregatable": false,
                "indices": ["index1", "index2"],
                "non_aggregatable_indices": ["index1"]
            },
            "keyword": {
                "searchable": false,
                "aggregatable": true,
                "indices": ["index3", "index4"],
                "non_searchable_indices": ["index4"]
            },
            "unmapped": { <1>
                "indices": ["index5"],
                "searchable": false,
                "aggregatable": false
            }
        },
        "title": {
            "text": {
                "indices": ["index1", "index2", "index3", "index4"],
                "searchable": true,
                "aggregatable": false
            },
            "unmapped": { <2>
                "indices": ["index5"]
                "searchable": false,
                "aggregatable": false
            }
        }
    }
}
--------------------------------------------------
// TESTRESPONSE[skip:historically skipped]

<1> The `rating` field is unmapped` in `index5`.
<2> The `title` field is unmapped` in `index5`.