Skip to content

Commit 4e31216

Browse files
committed
Add handling for sparse data
1 parent 3baa415 commit 4e31216

File tree

2 files changed

+53
-19
lines changed

2 files changed

+53
-19
lines changed

server/src/main/java/org/elasticsearch/index/codec/tsdb/es819/ES819TSDBDocValuesProducer.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -603,7 +603,7 @@ public BlockLoader.Block tryRead(
603603
}
604604
}
605605

606-
private abstract static class SparseBinaryDocValues extends BinaryDocValues {
606+
abstract static class SparseBinaryDocValues extends BinaryDocValues implements BlockLoader.OptionalColumnAtATimeReader {
607607

608608
final IndexedDISI disi;
609609

@@ -640,6 +640,19 @@ public boolean advanceExact(int target) throws IOException {
640640
public int docIDRunEnd() throws IOException {
641641
return disi.docIDRunEnd();
642642
}
643+
644+
@Override
645+
@Nullable
646+
public BlockLoader.Block tryRead(
647+
BlockLoader.BlockFactory factory,
648+
BlockLoader.Docs docs,
649+
int offset,
650+
boolean nullsFiltered,
651+
BlockDocValuesReader.ToDouble toDouble,
652+
boolean toInt
653+
) throws IOException {
654+
return null;
655+
}
643656
}
644657

645658
@Override

server/src/test/java/org/elasticsearch/index/codec/tsdb/es819/ES819TSDBDocValuesFormatTests.java

Lines changed: 39 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import org.elasticsearch.index.codec.tsdb.es819.ES819TSDBDocValuesProducer.BaseDenseNumericValues;
5050
import org.elasticsearch.index.codec.tsdb.es819.ES819TSDBDocValuesProducer.BaseSortedDocValues;
5151
import org.elasticsearch.index.codec.tsdb.es819.ES819TSDBDocValuesProducer.DenseBinaryDocValues;
52+
import org.elasticsearch.index.codec.tsdb.es819.ES819TSDBDocValuesProducer.SparseBinaryDocValues;
5253
import org.elasticsearch.index.mapper.BlockLoader;
5354
import org.elasticsearch.index.mapper.BlockLoader.OptionalColumnAtATimeReader;
5455
import org.elasticsearch.index.mapper.TestBlock;
@@ -1208,6 +1209,7 @@ public void testOptionalColumnAtATimeReaderWithSparseDocs() throws Exception {
12081209
final String binaryFixedField = "binary_variable";
12091210
final String binaryVariableField = "binary_fixed";
12101211
final int binaryFieldMaxLength = randomIntBetween(1, 20);
1212+
boolean denseBinaryData = randomBoolean();
12111213

12121214
long currentTimestamp = 1704067200000L;
12131215
long currentCounter = 10_000_000;
@@ -1229,10 +1231,12 @@ public void testOptionalColumnAtATimeReaderWithSparseDocs() throws Exception {
12291231
d.add(new SortedDocValuesField(counterAsStringField, new BytesRef(Long.toString(currentCounter))));
12301232
d.add(new SortedNumericDocValuesField(queryField, q));
12311233

1232-
binaryFixed[numDocs - i] = new BytesRef(randomAlphaOfLength(binaryFieldMaxLength));
1233-
d.add(new BinaryDocValuesField(binaryFixedField, binaryFixed[numDocs - i]));
1234-
binaryVariable[numDocs - i] = new BytesRef(randomAlphaOfLength(between(0, binaryFieldMaxLength)));
1235-
d.add(new BinaryDocValuesField(binaryVariableField, binaryVariable[numDocs - i]));
1234+
if (denseBinaryData || random().nextBoolean()) {
1235+
binaryFixed[numDocs - i] = new BytesRef(randomAlphaOfLength(binaryFieldMaxLength));
1236+
d.add(new BinaryDocValuesField(binaryFixedField, binaryFixed[numDocs - i]));
1237+
binaryVariable[numDocs - i] = new BytesRef(randomAlphaOfLength(between(0, binaryFieldMaxLength)));
1238+
d.add(new BinaryDocValuesField(binaryVariableField, binaryVariable[numDocs - i]));
1239+
}
12361240

12371241
if (i % 120 == 0) {
12381242
q++;
@@ -1361,24 +1365,37 @@ public void testOptionalColumnAtATimeReaderWithSparseDocs() throws Exception {
13611365
}
13621366

13631367
{
1364-
// Bulk binary loader can only handle sparse queries over dense documents
1368+
// Bulk binary loader can only handle sparse queries over dense or sparse documents
13651369
List<Integer> testDocs = IntStream.range(0, numDocs - 1).filter(i -> randomBoolean()).boxed().toList();
13661370
docs = TestBlock.docs(testDocs.stream().mapToInt(n -> n).toArray());
13671371
if (testDocs.isEmpty() == false) {
1368-
{
1369-
var dv = getDenseBinaryValues(leafReader, binaryFixedField);
1370-
var block = (TestBlock) dv.tryRead(factory, docs, 0, random().nextBoolean(), null, false);
1371-
assertNotNull(block);
1372-
for (int i = 0; i < testDocs.size(); i++) {
1373-
assertThat(block.get(i), equalTo(binaryFixed[testDocs.get(i)]));
1372+
if (denseBinaryData) {
1373+
{
1374+
var dv = getDenseBinaryValues(leafReader, binaryFixedField);
1375+
var block = (TestBlock) dv.tryRead(factory, docs, 0, random().nextBoolean(), null, false);
1376+
assertNotNull(block);
1377+
for (int i = 0; i < testDocs.size(); i++) {
1378+
assertThat(block.get(i), equalTo(binaryFixed[testDocs.get(i)]));
1379+
}
13741380
}
1375-
}
1376-
{
1377-
var dv = getDenseBinaryValues(leafReader, binaryVariableField);
1378-
var block = (TestBlock) dv.tryRead(factory, docs, 0, random().nextBoolean(), null, false);
1379-
assertNotNull(block);
1380-
for (int i = 0; i < testDocs.size(); i++) {
1381-
assertThat(block.get(i), equalTo(binaryVariable[testDocs.get(i)]));
1381+
{
1382+
var dv = getDenseBinaryValues(leafReader, binaryVariableField);
1383+
var block = (TestBlock) dv.tryRead(factory, docs, 0, random().nextBoolean(), null, false);
1384+
assertNotNull(block);
1385+
for (int i = 0; i < testDocs.size(); i++) {
1386+
assertThat(block.get(i), equalTo(binaryVariable[testDocs.get(i)]));
1387+
}
1388+
}
1389+
} else {
1390+
{
1391+
var dv = getSparseBinaryValues(leafReader, binaryFixedField);
1392+
var block = (TestBlock) dv.tryRead(factory, docs, 0, random().nextBoolean(), null, false);
1393+
assertNull(block);
1394+
}
1395+
{
1396+
var dv = getSparseBinaryValues(leafReader, binaryVariableField);
1397+
var block = (TestBlock) dv.tryRead(factory, docs, 0, random().nextBoolean(), null, false);
1398+
assertNull(block);
13821399
}
13831400
}
13841401
}
@@ -1613,6 +1630,10 @@ private static DenseBinaryDocValues getDenseBinaryValues(LeafReader leafReader,
16131630
return (DenseBinaryDocValues) leafReader.getBinaryDocValues(field);
16141631
}
16151632

1633+
private static SparseBinaryDocValues getSparseBinaryValues(LeafReader leafReader, String field) throws IOException {
1634+
return (SparseBinaryDocValues) leafReader.getBinaryDocValues(field);
1635+
}
1636+
16161637
private static BaseDenseNumericValues getBaseDenseNumericValues(LeafReader leafReader, String field) throws IOException {
16171638
return (BaseDenseNumericValues) DocValues.unwrapSingleton(leafReader.getSortedNumericDocValues(field));
16181639
}

0 commit comments

Comments
 (0)