hello , I am trying to learn runtime .
it uses in the script the painless language , It wold be nice to I understand this language , that I could test it before mapping .
the way to test it before mapping it is search with runtime .
here it has one example -
PUT my-index-000002-test/
{
"mappings": {
"runtime": {
"day_of_week": {
"type": "keyword",
"script": {
"source": "emit(doc['@timestamp'].value.dayOfWeekEnum.getDisplayName(TextStyle.FULL, Locale.ROOT))"
}
}
},
"properties": {
"@timestamp": {"type": "date"}
}
}
}
GET my-index-000002-test/_mapping
POST my-index-000002-test/_bulk?refresh=true
{"index":{}}
{"@timestamp":1516729294000,"model_number":"QVKC92Q","measures":{"voltage":"5.2","start": "300","end":"8675309"}}
{"index":{}}
{"@timestamp":1516642894000,"model_number":"QVKC92Q","measures":{"voltage":"5.8","start": "300","end":"8675309"}}
{"index":{}}
{"@timestamp":1516556494000,"model_number":"QVKC92Q","measures":{"voltage":"5.1","start": "300","end":"8675309"}}
{"index":{}}
{"@timestamp":1516470094000,"model_number":"QVKC92Q","measures":{"voltage":"5.6","start": "300","end":"8675309"}}
{"index":{}}
{"@timestamp":1516383694000,"model_number":"HG537PU","measures":{"voltage":"4.2","start": "400","end":"8625309"}}
{"index":{}}
{"@timestamp":1516297294000,"model_number":"HG537PU","measures":{"voltage":"4.0","start": "400","end":"8625309"}}
GET my-index-000002-test/_search
{
"query": {
"match_all": {}
},
"fields" : ["day_of_week"]
}
this worked for me .
it returns -
"hits": [
{
"_index": "my-index-000002-test",
"_id": "pEH4q4kB6LNnmdzdEkwe",
"_score": 1,
"_source": {
"@timestamp": 1516729294000,
"model_number": "QVKC92Q",
"measures": {
"voltage": "5.2",
"start": "300",
"end": "8675309"
}
},
"fields": {
"day_of_week": [
"Tuesday"
]
}
},
{
"_index": "my-index-000002-test",
"_id": "pUH4q4kB6LNnmdzdEkwe",
"_score": 1,
"_source": {
"@timestamp": 1516642894000,
"model_number": "QVKC92Q",
"measures": {
"voltage": "5.8",
"start": "300",
"end": "8675309"
}
},
"fields": {
"day_of_week": [
"Monday"
]
}
},
NOW, I am trying to search with runtime , without mapping with runtime .
this is important to I test the Painless Script .
So , I did like that -
GET my-index-000002-test/_search
{
"runtime_mappings": {
"day_of_week": {
"type": "keyword",
"source": "emit(doc['@timestamp'].value.dayOfWeekEnum.getDisplayName(TextStyle.FULL, Locale.ROOT))"
}
},
"query": {
"match_all": {}
},
"fields" : ["day_of_week"]
}
It is the same script that I used to mapping , and after search .
but it gave me this error -
{
"error": {
"root_cause": [
{
"type": "mapper_parsing_exception",
"reason": "unknown parameter [source] on runtime field [day_of_week] of type [keyword]"
}
],
"type": "search_phase_execution_exception",
"reason": "all shards failed",
"phase": "query",
"grouped": true,
"failed_shards": [
{
"shard": 0,
"index": "my-index-000002-test",
"node": "d8DCCAzDQGCLFPA7rX5QSQ",
"reason": {
"type": "mapper_parsing_exception",
"reason": "unknown parameter [source] on runtime field [day_of_week] of type [keyword]"
}
}
]
},
"status": 400
}