how to set fielddata=true in kibana
This code fixes this problem.
PUT megacorp/_mapping/employee
{
"employee": {
"properties": {
"interests": {
"type": "text",
"fielddata": true
}
}
}
}
So this code will run thereafter:
GET /megacorp/employee/_search
{
"aggs": {
"all_interests": {
"terms": { "field": "interests"}
}
}
}
Since you're using Elastic 5.x (5.2 is out now as I write this), you should instead use the new keyword support instead of enabling fielddata on an indexed field.
https://www.elastic.co/guide/en/elasticsearch/reference/5.2/fielddata.html provides good information on the pros and cons and on how to set this. From the page:
PUT my_index
{
"mappings": {
"my_type": {
"properties": {
"my_field": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
}
}
}
You then use the 'my_field' field for searches and the 'my_field.keyword' field for aggregations, sorting, or in scripts.
my_field.keyword is what you would use within Kibana / Grafana.
In your ES mapping, you need to set fielddata:true
in your publisher
field:
PUT your_index/_mapping/your_type
{
"your_type": {
"properties": {
"publisher": {
"type": "text",
"fielddata": true
}
}
}
}
You'll need to reindex your data after making this change, but afterwards Kibana won't complain anymore.
UPDATE
You can either execute the above query in the Sense UI or through curl
curl -XPUT http://localhost:9200/index -d '{
"mappings": {
"type": {
"properties": {
"publisher": {
"type": "text",
"fielddata": true
}
}
}
}
}'
Or you can also execute it in your Javascript file just before creating your document:
client.indices.create({
index: 'index',
body: {
"mappings": {
"type": {
"properties": {
"publisher": {
"type": "text",
"fielddata": true
}
}
}
}
}
});
If you are coming from the book "ElasticsearchThe Definitive Guide", try changing this
"terms" : { "field" : "interests" },
to
"terms" : { "field" : "interests.keyword" },
So, the code to run will become;
GET /megacorp/employee/_search
{
"aggs": {
"all_interests": {
"terms": { "field": "interests.keyword"}
}
}
}