Здравствуйте, подскажите пож-та, можно ли сделать terms аггрегацию с условием что один из сгруппированных документов должен иметь определённое значение поля, при этом остальные документы могут иметь другое значение, но они тоже должны быть в результате группировки.
Например есть документы
Документы
{
"id": 1,
"status": 1,
"data": {"reference": 1, "upc": 1 }
}
{
"id": 2,
"status": 2,
"data": {"reference": 1, "upc": 2 }
}
{
"id": 3,
"status": 1,
"data": {"reference": 1, "upc": 3 }
}
Нужно найти эти документы только если в группе объеденнёных документов, есть документ с "status": 2, если в группе нет документа с таким статусом, то вся группа должна отсутстовать в результатах.
Сами документы группируются по полю data.reference
Сейчас поиск работает по такому запросу и в нём не учитывается статус.
Запрос
{
"size": 0,
"aggs": {
"products": {
"composite": {
"size": 200,
"sources": [
{
"by_merge_field": {
"terms": {
"script": {
"source": """
if(!doc['data.reference.keyword'].empty) {
return doc['data.reference.keyword'].value
}
if(!doc['data.upc.keyword'].empty) {
return doc['data.upc.keyword'].value
}
return null
""",
"lang": "painless"
}
}
}
}
]
},
"aggs": {
"docs": {
"top_hits": {
"_source": {
"includes": ""
}
}
}
}
}
}
}