ElasticSearch 5.1 Fielddata is disabled in text field by default [ERROR: trying to use aggregation on field]

16,772

Solution 1

You need to aggregate on the keyword sub-field, like this:

"aggs": {
"answer": {
  "terms": {
    "field": "answer.keyword"
  }
},

That will work.

Solution 2

In Aggregation, just add keyword to answer.It worked for me. For text fields we need to add keyword. "field": "answer.keyword"

Solution 3

Adding to @Val's answer, you can also set the fielddata to true during your mapping itself:

"answer": {
        "type": "text",
        "fielddata": true, <-- add this line
        "fields": {
          "keyword": {
            "type": "keyword",                
            "ignore_above": 256
          }
        }
      },
Share:
16,772
Nacho Nieva
Author by

Nacho Nieva

BY DAY: PHP, javascript programmer

Updated on June 05, 2022

Comments

  • Nacho Nieva
    Nacho Nieva almost 2 years

    Having this field in my mapping

    "answer": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
    

    i try to execute this aggregation

    "aggs": {
    "answer": {
      "terms": {
        "field": "answer"
      }
    },
    

    but i get this error

    "type": "illegal_argument_exception",
          "reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [answer] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory."
    

    Do i have to change my mapping or am i using the wrong aggregation ? (just updated from 2.x to 5.1)

  • Val
    Val over 7 years
    I'm not certain the keyword type accepts any fielddata setting actually, like the text type does.
  • Kulasangar
    Kulasangar over 7 years
    As per the exception (Set fielddata=true on [answer]), I thought the issue was from the answer in the mapping provided.
  • Val
    Val over 7 years
    That's because he aggregated on answer, but he's better off aggregating on answer.keyword since he has that field.