То, что я сделал, использует Термины агрегации с использованием скрипта до , создающие ключи из трех разных полей и затем применяют Термины агрегации к этому объединенное поле, чтобы дать то, что вы хотите.
Я создал образец индекса с 3 полями (field1
, field2
и field3
типа keyword
) с документами, как показано ниже. Вы можете проверить запрос и часть результатов, чтобы увидеть, как они выглядят. Ключевым моментом является keys
в части результата различны.
Образцы документов
POST myfieldindex/mydocs/1
{
"field1": "Football",
"field2": "Premier League",
"field3": "Chelsea"
}
POST myfieldindex/mydocs/3
{
"field1": "Football",
"field2": "Premier League",
"field3": "Liverpool"
}
POST myfieldindex/mydocs/3
{
"field1": "Football",
"field2": "Premier League",
"field3": "ManCity"
}
Запрос
POST myfieldindex/_search
{
"size":0,
"aggs":{
"myagg":{
"terms":{
"script":{
"source":"doc['field1'].value + params.param + doc['field2'].value + params.param + doc['field3'].value",
"lang":"painless",
"params":{
"param":","
}
}
}
}
}
}
Результаты запроса
{
"took": 0,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 0,
"hits": []
},
"aggregations": {
"myagg": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "Football,Premier League,Chelsea",
"doc_count": 1
},
{
"key": "Football,Premier League,Liverpool",
"doc_count": 1
},
{
"key": "Football,Premier League,ManCity",
"doc_count": 1
}
]
}
}
}
Таким образом, вы можете видеть в результатах, как строится key
(ключи уникальны).
Дайте мне знать, если это поможет!