Hi,
I want to use ElasticSearch 6.6 as a Time Series Database and need to map the timestamp as a date to plot the data in Grafana. I am stuck at the index creation because Java keeps throwing the same exception :
org.elasticsearch.action.ActionRequestValidationException: Validation Failed: 1: mapping type is missing;
I tried two different ways to make it working :
- 
Importing a JSON from a file :
ClassLoader loader = getClass().getClassLoader(); File file = new File(loader.getResource("elastic-mapping.json").getFile()); Scanner scanner = new Scanner(file); String str = ""; while(scanner.hasNextLine()) { str += scanner.nextLine() + "\n"; } scanner.close(); PutMappingRequest mapRequest = new PutMappingRequest("benchmark"); mapRequest.source(str, XContentType.JSON); System.out.println(str); AcknowledgedResponse putMappingResponse = client.indices().putMapping(mapRequest, RequestOptions.DEFAULT); 
The JSON file :
{
    "properties":{
        "@timestamp":{"type":"date","fields":{"keyword":{"type":"keyword","ignore_above":256}}},
        "alert":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},
        "curve":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},
        "engValidity":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},
        "engValue":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},
        "id":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},
        "limits":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},
        "monState":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},
        "name":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},
        "rawValidity":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},
        "sample":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},
        "spid":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},
        "bitOffset":{"type":"float"},
        "bitSize":{"type":"float"},
        "pk":{"type":"float"},
        "rawValue":{"type":"float"},
        "receivedTime":{"type":"float"}
    }
}
- 
Building the JSON with a HashMap :
// Properties
Map<String, Object> timestamp = new HashMap<>();
timestamp.put("type", "date");
Map<String, Object> field2 = new HashMap<>();
field2.put("type", "text");
...
// Adds all the properties in the properties list
Map<String, Object> properties = new HashMap<>();
properties.put("@timestamp", timestamp);
properties.put("field2", field2);
...
// Final JSON map
Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put("properties", properties);
// Builds and returns the request
PutMappingRequest request = new PutMappingRequest("index");
request.source(jsonMap);
AcknowledgedResponse putMappingResponse = client.indices().putMapping(request, RequestOptions.DEFAULT); 
I can't find where I did a mistake...
