Невозможно получить доступ к вложенному соседу do c в запросе сценария из-за природы вложенного , в результате чего каждый (под) документ обрабатывается как отдельный документ - будь то на верхний уровень или в массиве объектов, таких как ваш rotation_list.project_end_date
.
Единственная допустимая ситуация с доступом ко всему контексту вложенного поля находится в пределах script_fields
, но вы, к сожалению, не можете запрашивать по ним - создавайте их только на лету и извлекайте:
Используя ваше отображение сверху
GET supply_nested/_search
{
"script_fields": {
"combined_end_dates": {
"script": {
"lang": "painless",
"source": "params['_source']['rotation_list'][0]['project_end_date']"
}
}
}
}
Итерация в запросе сценария возможна, только если вложено только rotation_list
, но не project_end_date
. Здесь используется 7.x:
PUT supply_non_nested
{
"mappings": {
"properties": {
"rotation_list": {
"type": "nested",
"properties": {
"project_end_date": {
"type": "object",
"properties": {
"end_date": {
"type": "date",
"format": "yyyy-MM-dd"
}
}
},
"total_days": {
"type": "integer"
}
}
}
}
}
}
Syn c a do c:
POST supply_non_nested/_doc
{
"rotation_list": [
{
"project_end_date": [
{
"end_date": "2020-08-07"
},
{
"end_date": "2020-06-07"
}
],
"total_days": 23
},
{
"project_end_date": [
{
"end_date": "2020-08-07"
}
],
"total_days": 26
}
]
}
Запрос с использованием painless
вместо groovy
, потому что это более безопасно и менее подробный в этом случае:
GET supply_non_nested/_search
{
"query": {
"bool": {
"filter": {
"bool": {
"must": [
{
"nested": {
"path": "rotation_list",
"query": {
"script": {
"script": {
"lang": "painless",
"inline": "Debug.explain(doc['rotation_list.project_end_date.end_date'])"
}
}
}
}
}
]
}
}
}
}
}
, что дает
...
"reason": {
...
"to_string": "[2020-06-07T00:00:00.000Z, 2020-08-07T00:00:00.000Z]",
"java_class": "org.elasticsearch.index.fielddata.ScriptDocValues$Dates",
}
...
Из вашего фрагмента не совсем ясно, чего вы пытались достичь в запросе. Не могли бы вы уточнить?