4949import org .elasticsearch .index .codec .tsdb .es819 .ES819TSDBDocValuesProducer .BaseDenseNumericValues ;
5050import org .elasticsearch .index .codec .tsdb .es819 .ES819TSDBDocValuesProducer .BaseSortedDocValues ;
5151import org .elasticsearch .index .codec .tsdb .es819 .ES819TSDBDocValuesProducer .DenseBinaryDocValues ;
52+ import org .elasticsearch .index .codec .tsdb .es819 .ES819TSDBDocValuesProducer .SparseBinaryDocValues ;
5253import org .elasticsearch .index .mapper .BlockLoader ;
5354import org .elasticsearch .index .mapper .BlockLoader .OptionalColumnAtATimeReader ;
5455import 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