I just start using elasticsearch 5.2 .
I am trying to get all keys in the index if I have the following mapping:
"properties": {
"name": { "type": "text" },
"article": {
"properties": {
"id": { "type": "text" },
"title": { "type": "text"},
"abstract": { "type": "text"},
"author": {
"properties": {
"id": { "type": "text" },
"name": { "type": "text" }
}}}} } }
is it possible to get all fields full name ? like this:
name,
article.id ,
article.title ,
article.abstract ,
article.author.id,
article.author.name
how can I get that ?
You may use _field_names field.
The _field_names field indexes the names of every field in a document that contains any value other than null.
GET _search
{
"size"0,
"aggs": {
"Field names": {
"terms": {
"field": "_field_names",
"size": 100
}
}
}
}
Update : from ES 5 onwards
the _field_names field has been locked down and is only indexed, it doesn't support fielddata (memory intensive) or doc values,
Ref : https://github.com/elastic/elasticsearch/issues/22576
As an alternative, you may getMapping API
The get mapping API can be used to get more than one index or type mapping with a single call. General usage of the API follows the following syntax: host:port/{index}/_mapping/{type}
$ curl -XGET 'http://localhost:9200/index/_mapping?pretty'
You may then process the response to extract all the field names in the index
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With