Я думаю, что вы ищете:
doc['enabled_services.available_from_time'].value.isAfter(doc['enabled_services.available_to_time'].value)
Вам также необходимо удалить "type": "nested"
из вашего сопоставления. Я думаю, что это не нужно в вашем случае.
Рабочий код ниже:
Mapping
PUT /painless-dates
{
"settings": {
"index.mapping.total_fields.limit": 10000
},
"mappings": {
"_doc": {
"dynamic_templates": [
{
"integers": {
"match_mapping_type": "long",
"mapping": {
"type": "long",
"index": false
}
}
}
],
"properties": {
"enabled_services": {
"properties": {
"service_id": {
"type": "text",
"analyzer": "whitespace",
"search_analyzer": "whitespace"
},
"available_day_of_week": {
"type": "long"
},
"available_from_time": {
"type": "date",
"format": "hour_minute"
},
"available_to_time": {
"type": "date",
"format": "hour_minute"
}
}
}
}
}
}
}
Добавить два элемента
POST /painless-dates/_doc
{
"enabled_services": {
"available_from_time": "02:00",
"available_to_time": "18:00"
}
}
POST /painless-dates/_doc
{
"enabled_services": {
"available_from_time": "04:00",
"available_to_time": "03:00"
}
}
Запрос
GET /painless-dates/_search
{
"query": {
"bool": {
"must": {
"script": {
"script": {
"source": "doc['enabled_services.available_from_time'].value.isAfter(doc['enabled_services.available_to_time'].value)",
"lang": "painless"
}
}
}
}
}
}
Ответ
{
"took": 8,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "painless-dates",
"_type": "_doc",
"_id": "0wFw7mYBueYINcTmJsMG",
"_score": 1,
"_source": {
"enabled_services": {
"available_from_time": "04:00",
"available_to_time": "03:00"
}
}
}
]
}
}