Mixing up field types: on field _ttl on elasticsearch 2.3

I am using following in my mapping.
_ttl: {
"enabled": true,
"default": "15m"
}

I get failed to execute bulk item (index) index {[ultraesb][msg_statistics][AVXuOaBoYt4h9lsSojgC], source[{"totalMessageCount":7,"recordTime":"2016-07-15T16:33:12+0530","_ttl":"15m"}]}

Caused by: java.lang.IllegalStateException: Mixing up field types: class org.elasticsearch.index.mapper.core.LongFieldMapper$LongFieldType != class org.elasticsearch.index.mapper.internal.TTLFieldMapper$TTLFieldType on field _ttl

All i could find is this github discussion but doesn't tell how to solve the issue.

Any help is highly appreciated.

What does the rest of the mapping look like?

ALlso, ttl is deprecated so you shouldn't use it, it'll be removed in v5.

{
  "ultraesb" : {
    "mappings" : {
      "msg_statistics" : {
        "_timestamp" : {
          "enabled" : true
        },
        "_ttl" : {
          "enabled" : true,
          "default" : 900000
        },
        "dynamic_templates" : [ {
          "index_nonanalyzed" : {
            "mapping" : {
              "index" : "not_analyzed"
            },
            "match" : "*"
          }
        } ],
        "properties" : {
          "customFields" : {
            "type" : "nested"
          },
          "recordTime" : {
            "type" : "date",
            "format" : "yyyy-MM-dd'T'HH:mm:ssZ"
          }
        }
      }
    }
  }
}

Thank you for your reply. I know that ttl is deprecated but I would like to get ttl to work in 2.3 for now rather that upgrading to use 5.x

Full stacktrace

MapperParsingException[failed to parse]; nested: IllegalStateException[Mixing up field types: class org.elasticsearch.index.mapper.core.LongFieldMapper$LongFieldType != class org.elasticsearch.index.mapper.internal.TTLFieldMapper$TTLFieldType on field _ttl];
    at org.elasticsearch.index.mapper.DocumentParser.parseDocument(DocumentParser.java:154)
    at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:309)
    at org.elasticsearch.index.shard.IndexShard.prepareCreate(IndexShard.java:529)
    at org.elasticsearch.index.shard.IndexShard.prepareCreateOnPrimary(IndexShard.java:506)
    at org.elasticsearch.action.index.TransportIndexAction.prepareIndexOperationOnPrimary(TransportIndexAction.java:215)
    at org.elasticsearch.action.index.TransportIndexAction.executeIndexRequestOnPrimary(TransportIndexAction.java:224)
    at org.elasticsearch.action.bulk.TransportShardBulkAction.shardIndexOperation(TransportShardBulkAction.java:326)
    at org.elasticsearch.action.bulk.TransportShardBulkAction.shardOperationOnPrimary(TransportShardBulkAction.java:119)
    at org.elasticsearch.action.bulk.TransportShardBulkAction.shardOperationOnPrimary(TransportShardBulkAction.java:68)
    at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryPhase.doRun(TransportReplicationAction.java:639)
    at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
    at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryOperationTransportHandler.messageReceived(TransportReplicationAction.java:279)
    at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryOperationTransportHandler.messageReceived(TransportReplicationAction.java:271)
    at org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:75)
    at org.elasticsearch.transport.TransportService$4.doRun(TransportService.java:376)
    at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalStateException: Mixing up field types: class org.elasticsearch.index.mapper.core.LongFieldMapper$LongFieldType != class org.elasticsearch.index.mapper.internal.TTLFieldMapper$TTLFieldType on field _ttl
    at org.elasticsearch.index.mapper.FieldMapper.updateFieldType(FieldMapper.java:397)
    at org.elasticsearch.index.mapper.FieldMapper.updateFieldType(FieldMapper.java:53)
    at org.elasticsearch.index.mapper.DocumentParser.parseDynamicValue(DocumentParser.java:622)
    at org.elasticsearch.index.mapper.DocumentParser.parseValue(DocumentParser.java:442)
    at org.elasticsearch.index.mapper.DocumentParser.parseObject(DocumentParser.java:262)
    at org.elasticsearch.index.mapper.DocumentParser.parseDocument(DocumentParser.java:122)
    ... 18 more

Is that the entire mapping for the index?

yes. Actually i tried without setting any default ttl value as you can see in the mapping. Still i get the same error though. I tried give ttl as a long value(900000L) as a string (like "900000" and "15m") too. Still no luck.

I am facing the same issue in 2.3; the only way I have successfully used TTL is by setting a default TTL, but any attempt to create a record with a specific TTL in the JSON, both with and without extensions like "ms", results in the "Mixing up field types: class org.elasticsearch.index.mapper.core.LongFieldMapper$LongFieldType != class org.elasticsearch.index.mapper.internal.TTLFieldMapper$TTLFieldType on field _ttl" error.

I also ended up using the default _ttl. Now I have moved to 5.1.1 which does not have the ttl support but has the index roll over support. https://www.elastic.co/blog/managing-time-based-indices-efficiently

You might want to also consider these product end dates for selecting a version. https://www.elastic.co/support/eol

If you want to stick to 2.x, perhaps you could try a slightly newer version like 2.4.1. https://www.elastic.co/downloads/past-releases/elasticsearch-2-4-1