У нас есть сценарий использования с Elasticsearch, для структуры индекса у нас есть несколько вложенных объектов на уровне одного уровня, а для нашего варианта использования: нам нужно объединить более одного свойства вложенных объектов в агрегировании терминов, скажем,Свойство 1 вложенного объекта + свойство 2 другого вложенного объекта в виде единственного ключевого элемента,
Например, структура документа:
{
"OuterProperty1":"value",
"NestedObject1" : {
"Property1" : value 1,
"Property2" : value 2
},
"NestedObject2" : {
"Property1" : value 1,
"Property2" : value 2
}
}
и для агрегирования терминов с вложенными объектами. , мы хотим использовать следующий скрипт,
"script":{
"source":"""
String aggKey= (doc['NestedObject1.Property1'].value.toString())+'_'+(doc['NestedObject2.Property2'].value.toString());
return aggKey;
"""
,
"lang":"painless"
},
"size":10000
и для доступа к свойствам различных вложенных объектов для комбинированного ключа, мне нужно предоставить связанные "пути" вложенных объектов, поэтому мой вопрос, есть лиспособ предоставления нескольких путей или с использованием какого-либо подстановочного знака для указания пути для нескольких вложенных объектов в нескольких вложенных объектах в агрегации и для достижения комбинированного результата запроса?
Что я хочу использовать, так это в терминах агрегации,термины ключи должны быть как комбинация «NestedObject1.Property1 + NestedObject2.Property1», чтоМы хотим достичь чего-то вроде:
"buckets" : [
{
"key" : "NestedObject1.Property1_NestedObject2.Property1",
"doc_count" : 14
},
{
"key" : "NestedObject1.Property1_NestedObject2.Property2",
"doc_count" : 4
}...
]
Мы пробовали выполнить следующие запросы: Запрос 1:
{
"query":{
"bool":{
"some filter..."
}},
"aggs":{
"TopLevelAggs":{
"nested":{
"path":"NestedObject1"
},
"aggs":{
"TestTopHitsAggs":{
"nested": {
"path": "NestedObject2"
},
"aggs":{
"TopHitsAggs":{
"terms": {
"script":{
"source":"""
String TestLinkIdD= (doc['NestedObject1.Property1'].value.toString())+'_'+(doc['NestedObject2.Property2'].value.toString());
return TestLinkIdD;
"""
,
"lang":"painless"
},
"size":10000
}
}
}
}
}
}
}
}
- Вышеупомянутый запрос, кажется, не обеспечиваетлюбые результаты. - вывод, который мы получаем:
"aggregations" : {
"ReportedProblemsTopLevelAggs" : {
"doc_count" : 0,
"TestTopHitsAggs" : {
"doc_count" : 0,
"TopHitsAggs" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [ ]
}
}
}
}
Способ 2: Мы также пытались получить доступ к NestedObject2 с помощью «агрегации с обратным переносом», но не работали с вариантом использования. Любая помощь будет оценена!