OpenSearch/docs/reference/search/field-caps.asciidoc
Jim Ferenczi a8250b26e7 Add FieldCapabilities (_field_caps) API (#23007)
This change introduces a new API called `_field_caps` that allows to retrieve the capabilities of specific fields.

Example:

````
GET t,s,v,w/_field_caps?fields=field1,field2
````
... returns:
````
{
   "fields": {
      "field1": {
         "string": {
            "searchable": true,
            "aggregatable": true
         }
      },
      "field2": {
         "keyword": {
            "searchable": false,
            "aggregatable": true,
            "non_searchable_indices": ["t"]
            "indices": ["t", "s"]
         },
         "long": {
            "searchable": true,
            "aggregatable": false,
            "non_aggregatable_indices": ["v"]
            "indices": ["v", "w"]
         }
      }
   }
}
````

In this example `field1` have the same type `text` across the requested indices `t`, `s`, `v`, `w`.
Conversely `field2` is defined with two conflicting types `keyword` and `long`.
Note that `_field_caps` does not treat this case as an error but rather return the list of unique types seen for this field.
2017-03-31 15:34:46 +02:00

127 lines
3.1 KiB
Plaintext

[[search-field-caps]]
== Field Capabilities API
experimental[]
The field capabilities API allows to retrieve the capabilities of fields among multiple indices.
The field capabilities api by default executes on all indices:
[source,js]
--------------------------------------------------
GET _field_caps?fields=rating
--------------------------------------------------
// CONSOLE
... but the request can also be restricted to specific indices:
[source,js]
--------------------------------------------------
GET twitter/_field_caps?fields=rating
--------------------------------------------------
// CONSOLE
// TEST[setup:twitter]
Alternatively the `fields` option can also be defined in the request body:
[source,js]
--------------------------------------------------
POST _field_caps
{
"fields" : ["rating"]
}
--------------------------------------------------
// CONSOLE
This is equivalent to the previous request.
Supported request options:
[horizontal]
`fields`:: A list of fields to compute stats for. The field name supports wildcard notation. For example, using `text_*`
will cause all fields that match the expression to be returned.
[float]
=== Field Capabilities
The field capabilities api returns the following information per field:
[horizontal]
`is_searchable`::
Whether this field is indexed for search on all indices.
`is_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.
[float]
=== Response format
Request:
[source,js]
--------------------------------------------------
GET _field_caps?fields=rating,title
--------------------------------------------------
// CONSOLE
[source,js]
--------------------------------------------------
{
"fields": {
"rating": { <1>
"long": {
"is_searchable": true,
"is_aggregatable": false,
"indices": ["index1", "index2"],
"non_aggregatable_indices": ["index1"] <2>
},
"keyword": {
"is_searchable": false,
"is_aggregatable": true,
"indices": ["index3", "index4"],
"non_searchable_indices": ["index4"] <3>
}
},
"title": { <4>
"text": {
"is_searchable": true,
"is_aggregatable": false
}
}
}
}
--------------------------------------------------
// NOTCONSOLE
<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.