Skip to content

Commit 7572c62

Browse files
author
Clément Tourrière
committed
Fixes serialization problem with high cardinality
1 parent 5b0e6a3 commit 7572c62

File tree

1 file changed

+33
-37
lines changed

1 file changed

+33
-37
lines changed

src/main/java/org/opendatasoft/elasticsearch/search/aggregations/bucket/InternalPathHierarchy.java

Lines changed: 33 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,6 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
139139
builder.endObject();
140140
return builder;
141141
}
142-
143142
}
144143

145144

@@ -283,52 +282,49 @@ public InternalPathHierarchy doReduce(List<InternalAggregation> aggregations, Re
283282
sum_other_hierarchy_nodes, separator, pipelineAggregators(), getMetaData());
284283
}
285284

286-
private void doXContentInternal(XContentBuilder builder, Params params, InternalBucket currentBucket,
287-
Iterator<InternalBucket> bucketIterator) throws IOException {
288-
builder.startObject();
289-
builder.field(CommonFields.KEY.getPreferredName(), currentBucket.basename);
290-
builder.field(CommonFields.DOC_COUNT.getPreferredName(), currentBucket.getDocCount());
291-
currentBucket.getAggregations().toXContentInternal(builder, params);
285+
@Override
286+
public XContentBuilder doXContentBody(XContentBuilder builder, Params params) throws IOException {
287+
// builder.field(SUM_OF_OTHER_HIERARCHY_NODES.getPreferredName(), otherHierarchyNodes);
288+
Iterator<InternalBucket> bucketIterator = buckets.iterator();
289+
builder.startArray(CommonFields.BUCKETS.getPreferredName());
290+
InternalBucket prevBucket = null;
291+
InternalBucket currentBucket = null;
292+
while (bucketIterator.hasNext()) {
293+
currentBucket = bucketIterator.next();
292294

293-
if (bucketIterator.hasNext()) {
294-
InternalBucket nextBucket = bucketIterator.next();
295-
if (nextBucket.level == currentBucket.level) {
296-
builder.endObject();
297-
} else if (nextBucket.level > currentBucket.level) {
298-
builder.startObject(name);
299-
builder.startArray(CommonFields.BUCKETS.getPreferredName());
300-
} else {
301-
builder.endObject();
302-
for (int i=currentBucket.level; i > nextBucket.level; i--) {
303-
builder.endArray();
295+
if (prevBucket != null) {
296+
if (prevBucket.level == currentBucket.level) {
304297
builder.endObject();
298+
} else if (prevBucket.level < currentBucket.level) {
299+
builder.startObject(name);
300+
builder.startArray(CommonFields.BUCKETS.getPreferredName());
301+
} else {
302+
for (int i = currentBucket.level; i < prevBucket.level; i++) {
303+
builder.endObject();
304+
builder.endArray();
305+
builder.endObject();
306+
}
305307
builder.endObject();
306308
}
307309
}
308-
doXContentInternal(builder, params, nextBucket, bucketIterator);
309-
} else {
310-
if (currentBucket.level > 0) {
310+
311+
builder.startObject();
312+
builder.field(CommonFields.KEY.getPreferredName(), currentBucket.basename);
313+
builder.field(CommonFields.DOC_COUNT.getPreferredName(), currentBucket.docCount);
314+
currentBucket.getAggregations().toXContentInternal(builder, params);
315+
316+
prevBucket = currentBucket;
317+
}
318+
319+
if (currentBucket != null) {
320+
for (int i=0; i < currentBucket.level; i++) {
311321
builder.endObject();
312-
for (int i=currentBucket.level; i > 0; i--) {
313-
builder.endArray();
314-
builder.endObject();
315-
builder.endObject();
316-
}
317-
} else {
322+
builder.endArray();
318323
builder.endObject();
319324
}
325+
builder.endObject();
320326
}
321-
}
322327

323-
@Override
324-
public XContentBuilder doXContentBody(XContentBuilder builder, Params params) throws IOException {
325-
// builder.field(SUM_OF_OTHER_HIERARCHY_NODES.getPreferredName(), otherHierarchyNodes);
326-
Iterator<InternalBucket> bucketIterator = buckets.iterator();
327-
builder.startArray(CommonFields.BUCKETS.getPreferredName());
328-
if (bucketIterator.hasNext()) {
329-
InternalBucket firstBucket = bucketIterator.next();
330-
doXContentInternal(builder, params, firstBucket, bucketIterator);
331-
}
332328
builder.endArray();
333329
return builder;
334330
}

0 commit comments

Comments
 (0)