Changing mapping on existing index is not an easy task. You may find the reason and possible solutions in here:
http://www.elasticsearch.org/blog/changing-mapping-with-zero-downtime/
to get current mapping details, here is the sample code:
ClusterState cs = client.admin().cluster().prepareState().setFilterIndices("myIndex").execute().actionGet().getState(); IndexMetaData imd = cs.getMetaData().index("myIndex") MappingMetaData mdd = imd.mapping("myType")
Put Mappings In Real time:
private void putMapping() { if (client != null) { if (client.admin().indices().prepareExists(IndexName).execute().actionGet().isExists()) { XContentBuilder mappings = null; try { mappings = XContentFactory.jsonBuilder() .startObject() .startObject(INDEX_TYPE) .startObject("properties") .startObject(FIELD_NAME) .field("type","string") .field("store","yes") .field("index", "analyzed") .field("analyzer", "simple") .endObject() .endObject() .endObject() .endObject(); } catch (IOException e) { e.printStackTrace(); } client.admin().indices().prepareClose(IndexName).execute().actionGet(); client.admin().indices().prepareDeleteMapping(IndexName).setType(INDEX_TYPE).execute().actionGet(); client.admin().indices().preparePutMapping(IndexName).setIgnoreConflicts(true).setType(INDEX_TYPE).setSource(mappings).execute().actionGet(); client.admin().indices().prepareOpen(IndexName).execute().actionGet(); } } else { throw new IllegalStateException(" Elastic Search not initialized properly.."); } }