forked from elastic/elasticsearch
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add missing_bucket option in the composite agg
This change adds a new option to the composite aggregation named `missing_bucket`. This option can be set by source and dictates whether documents without a value for the source should be ignored. When set to true, documents without a value for a field emits an explicit `null` value which is then added in the composite bucket. The `missing` option that allows to set an explicit value (instead of `null`) is deprecated in this change and will be removed in a follow up (only in 7.x). This commit also changes how the big arrays are allocated, instead of reserving the provided `size` for all sources they are created with a small intial size and they grow depending on the number of buckets created by the aggregation: Closes elastic#29380
- Loading branch information
Showing
25 changed files
with
913 additions
and
223 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
68 changes: 68 additions & 0 deletions
68
server/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/BitArray.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
/* | ||
* Licensed to Elasticsearch under one or more contributor | ||
* license agreements. See the NOTICE file distributed with | ||
* this work for additional information regarding copyright | ||
* ownership. Elasticsearch licenses this file to you under | ||
* the Apache License, Version 2.0 (the "License"); you may | ||
* not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, | ||
* software distributed under the License is distributed on an | ||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
* KIND, either express or implied. See the License for the | ||
* specific language governing permissions and limitations | ||
* under the License. | ||
*/ | ||
|
||
package org.elasticsearch.search.aggregations.bucket.composite; | ||
|
||
import org.elasticsearch.common.lease.Releasable; | ||
import org.elasticsearch.common.lease.Releasables; | ||
import org.elasticsearch.common.util.BigArrays; | ||
import org.elasticsearch.common.util.LongArray; | ||
|
||
/** | ||
* A bit array that is implemented using a growing {@link LongArray} | ||
* created from {@link BigArrays}. | ||
* The underlying long array grows lazily based on the biggest index | ||
* that needs to be set. | ||
*/ | ||
final class BitArray implements Releasable { | ||
private final BigArrays bigArrays; | ||
private LongArray bits; | ||
|
||
BitArray(BigArrays bigArrays, int initialSize) { | ||
this.bigArrays = bigArrays; | ||
this.bits = bigArrays.newLongArray(initialSize, true); | ||
} | ||
|
||
public void set(int index) { | ||
fill(index, true); | ||
} | ||
|
||
public void clear(int index) { | ||
fill(index, false); | ||
} | ||
|
||
public boolean get(int index) { | ||
int wordNum = index >> 6; | ||
long bitmask = 1L << index; | ||
return (bits.get(wordNum) & bitmask) != 0; | ||
} | ||
|
||
private void fill(int index, boolean bit) { | ||
int wordNum = index >> 6; | ||
bits = bigArrays.grow(bits,wordNum+1); | ||
long bitmask = 1L << index; | ||
long value = bit ? bits.get(wordNum) | bitmask : bits.get(wordNum) & ~bitmask; | ||
bits.set(wordNum, value); | ||
} | ||
|
||
@Override | ||
public void close() { | ||
Releasables.close(bits); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.