Tag Archives: Fielddata is disabled on text fields by default

Elasticsearch 6.2.3 version executes aggregation error Fielddata is disabled on text fields by default

Background note

Execute the example of “Elasticsearch Authoritative Guide”, when executing aggregate query, error  Fielddata is disabled on text fields by default.

1) The aggregation statement is as follows:

GET _search
{
  "aggs": {
    "all_interests": {
      "terms": { "field": "interests"}
    }
  }
}

 

2) The error message is as follows:

{
  "error": {
    "root_cause": [
      {
        "type": "illegal_argument_exception",
        "reason": "

Fielddata is disabled on text fields by default.

 Set fielddata=true on [interests] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead."
      }
    ],
    "type": "search_phase_execution_exception",
    "reason": "all shards failed",
    "phase": "query",
    "grouped": true,
    "failed_shards": [
      {
        "shard": 0,
        "index": "megacorp",
        "node": "jbFtoSVqQAqfYhE5uTBFvw",
        "reason": {
          "type": "illegal_argument_exception",
          "reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [interests] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead."
        }
      }
    ]
  },
  "status": 400
}

 

3) The screenshot of Kibana’s Dev Tools execution is as follows:

 

Cause Analysis

After Elasticsearch 5.x version, operations such as sorting and aggregation are cached in memory with a separate data structure (fielddata), which is not enabled by default and needs to be enabled separately .

For details, please refer to: fielddata

 

 

solution

1) Execute the following statement to enable the mapping of the interests field:

PUT megacorp/_mapping/employee/
{
    "properties":{
        "interests":{
            "type":"text",
            "fielddata":true
        }
    }
}

 

2) Execute the opening mapping statement in Dev Tools of Kibana, the screenshot is as follows:

 

3) Implement the aggregation statement again, and the results are as follows:

{
  "took": 455,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 3,
    "max_score": 1,
    "hits": [
      {
        "_index": "megacorp",
        "_type": "employee",
        "_id": "2",
        "_score": 1,
        "_source": {
          "first_name": "Jane",
          "last_name": "Smith",
          "age": 32,
          "about": "I like to collect rock albums",
          "interests": [
            "music"
          ]
        }
      },
      {
        "_index": "megacorp",
        "_type": "employee",
        "_id": "1",
        "_score": 1,
        "_source": {
          "first_name": "John",
          "last_name": "Smith",
          "age": 25,
          "about": "I love to go rock climbing",
          "interests": [
            "sports"
          ]
        }
      },
      {
        "_index": "megacorp",
        "_type": "employee",
        "_id": "3",
        "_score": 1,
        "_source": {
          "first_name": "Douglas",
          "last_name": "Fir",
          "age": 35,
          "about": "I like to build cabinets",
          "interests": [
            "forestry"
          ]
        }
      }
    ]
  },
  "aggregations": {
    "all_interests": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": "forestry",
          "doc_count": 1
        },
        {
          "key": "music",
          "doc_count": 1
        },
        {
          "key": "sports",
          "doc_count": 1
        }
      ]
    }
  }
}

 

4) In Kibana’s Dev Tools, the execution effect screenshot is as follows: