33
33
import org .opensearch .index .compositeindex .datacube .startree .index .StarTreeValues ;
34
34
import org .opensearch .index .compositeindex .datacube .startree .node .InMemoryTreeNode ;
35
35
import org .opensearch .index .compositeindex .datacube .startree .node .StarTreeNodeType ;
36
- import org .opensearch .index .compositeindex .datacube .startree .utils .SequentialDocValuesIterator ;
36
+ import org .opensearch .index .compositeindex .datacube .startree .utils .SequentialValuesIterator ;
37
+ import org .opensearch .index .compositeindex .datacube .startree .utils .iterator .SortedNumericStarTreeValuesIterator ;
37
38
import org .opensearch .index .mapper .DocCountFieldMapper ;
38
39
import org .opensearch .index .mapper .FieldMapper ;
39
40
import org .opensearch .index .mapper .FieldValueConverter ;
@@ -177,13 +178,13 @@ public List<MetricAggregatorInfo> generateMetricAggregatorInfos(MapperService ma
177
178
*
178
179
* @return list of MetricAggregatorInfo
179
180
*/
180
- public List <SequentialDocValuesIterator > getMetricReaders (SegmentWriteState state , Map <String , DocValuesProducer > fieldProducerMap )
181
+ public List <SequentialValuesIterator > getMetricReaders (SegmentWriteState state , Map <String , DocValuesProducer > fieldProducerMap )
181
182
throws IOException {
182
183
183
- List <SequentialDocValuesIterator > metricReaders = new ArrayList <>();
184
+ List <SequentialValuesIterator > metricReaders = new ArrayList <>();
184
185
for (Metric metric : this .starTreeField .getMetrics ()) {
185
186
for (MetricStat metricStat : metric .getBaseMetrics ()) {
186
- SequentialDocValuesIterator metricReader ;
187
+ SequentialValuesIterator metricReader ;
187
188
FieldInfo metricFieldInfo = state .fieldInfos .fieldInfo (metric .getField ());
188
189
if (metricStat .equals (MetricStat .DOC_COUNT )) {
189
190
// _doc_count is numeric field , so we convert to sortedNumericDocValues and get iterator
@@ -192,8 +193,10 @@ public List<SequentialDocValuesIterator> getMetricReaders(SegmentWriteState stat
192
193
if (metricFieldInfo == null ) {
193
194
metricFieldInfo = getFieldInfo (metric .getField (), DocValuesType .SORTED_NUMERIC );
194
195
}
195
- metricReader = new SequentialDocValuesIterator (
196
- fieldProducerMap .get (metricFieldInfo .name ).getSortedNumeric (metricFieldInfo )
196
+ metricReader = new SequentialValuesIterator (
197
+ new SortedNumericStarTreeValuesIterator (
198
+ fieldProducerMap .get (metricFieldInfo .name ).getSortedNumeric (metricFieldInfo )
199
+ )
197
200
);
198
201
}
199
202
metricReaders .add (metricReader );
@@ -218,17 +221,17 @@ public void build(
218
221
long startTime = System .currentTimeMillis ();
219
222
logger .debug ("Star-tree build is a go with star tree field {}" , starTreeField .getName ());
220
223
221
- List <SequentialDocValuesIterator > metricReaders = getMetricReaders (writeState , fieldProducerMap );
224
+ List <SequentialValuesIterator > metricReaders = getMetricReaders (writeState , fieldProducerMap );
222
225
List <Dimension > dimensionsSplitOrder = starTreeField .getDimensionsOrder ();
223
- SequentialDocValuesIterator [] dimensionReaders = new SequentialDocValuesIterator [dimensionsSplitOrder .size ()];
226
+ SequentialValuesIterator [] dimensionReaders = new SequentialValuesIterator [dimensionsSplitOrder .size ()];
224
227
for (int i = 0 ; i < numDimensions ; i ++) {
225
228
String dimension = dimensionsSplitOrder .get (i ).getField ();
226
229
FieldInfo dimensionFieldInfo = writeState .fieldInfos .fieldInfo (dimension );
227
230
if (dimensionFieldInfo == null ) {
228
231
dimensionFieldInfo = getFieldInfo (dimension , DocValuesType .SORTED_NUMERIC );
229
232
}
230
- dimensionReaders [i ] = new SequentialDocValuesIterator (
231
- fieldProducerMap .get (dimensionFieldInfo .name ).getSortedNumeric (dimensionFieldInfo )
233
+ dimensionReaders [i ] = new SequentialValuesIterator (
234
+ new SortedNumericStarTreeValuesIterator ( fieldProducerMap .get (dimensionFieldInfo .name ).getSortedNumeric (dimensionFieldInfo ) )
232
235
);
233
236
}
234
237
Iterator <StarTreeDocument > starTreeDocumentIterator = sortAndAggregateSegmentDocuments (dimensionReaders , metricReaders );
@@ -287,7 +290,7 @@ void appendDocumentsToStarTree(Iterator<StarTreeDocument> starTreeDocumentIterat
287
290
}
288
291
}
289
292
290
- private void serializeStarTree (int numSegmentStarTreeDocument , int numStarTreeDocs ) throws IOException {
293
+ private void serializeStarTree (int numSegmentStarTreeEntries , int numStarTreeEntries ) throws IOException {
291
294
// serialize the star tree data
292
295
long dataFilePointer = dataOut .getFilePointer ();
293
296
StarTreeWriter starTreeWriter = new StarTreeWriter ();
@@ -299,8 +302,8 @@ private void serializeStarTree(int numSegmentStarTreeDocument, int numStarTreeDo
299
302
starTreeField ,
300
303
metricAggregatorInfos ,
301
304
numStarTreeNodes ,
302
- numSegmentStarTreeDocument ,
303
- numStarTreeDocs ,
305
+ numSegmentStarTreeEntries ,
306
+ numStarTreeEntries ,
304
307
dataFilePointer ,
305
308
totalStarTreeDataLength
306
309
);
@@ -395,27 +398,25 @@ public SortedNumericDocValues getSortedNumeric(FieldInfo field) {
395
398
*/
396
399
protected StarTreeDocument getStarTreeDocument (
397
400
int currentDocId ,
398
- SequentialDocValuesIterator [] dimensionReaders ,
399
- List <SequentialDocValuesIterator > metricReaders
401
+ SequentialValuesIterator [] dimensionReaders ,
402
+ List <SequentialValuesIterator > metricReaders
400
403
) throws IOException {
401
404
Long [] dims = new Long [numDimensions ];
402
405
int i = 0 ;
403
- for (SequentialDocValuesIterator dimensionDocValueIterator : dimensionReaders ) {
404
- dimensionDocValueIterator . nextDoc (currentDocId );
405
- Long val = dimensionDocValueIterator .value (currentDocId );
406
+ for (SequentialValuesIterator dimensionValueIterator : dimensionReaders ) {
407
+ dimensionValueIterator . nextEntry (currentDocId );
408
+ Long val = dimensionValueIterator .value (currentDocId );
406
409
dims [i ] = val ;
407
410
i ++;
408
411
}
409
412
i = 0 ;
410
413
Object [] metrics = new Object [metricReaders .size ()];
411
- for (SequentialDocValuesIterator metricDocValuesIterator : metricReaders ) {
412
- metricDocValuesIterator . nextDoc (currentDocId );
414
+ for (SequentialValuesIterator metricValuesIterator : metricReaders ) {
415
+ metricValuesIterator . nextEntry (currentDocId );
413
416
// As part of merge, we traverse the star tree doc values
414
417
// The type of data stored in metric fields is different from the
415
418
// actual indexing field they're based on
416
- metrics [i ] = metricAggregatorInfos .get (i )
417
- .getValueAggregators ()
418
- .toAggregatedValueType (metricDocValuesIterator .value (currentDocId ));
419
+ metrics [i ] = metricAggregatorInfos .get (i ).getValueAggregators ().toAggregatedValueType (metricValuesIterator .value (currentDocId ));
419
420
i ++;
420
421
}
421
422
return new StarTreeDocument (dims , metrics );
@@ -463,8 +464,8 @@ protected StarTreeDocument getStarTreeDocument(
463
464
* @return Iterator for the aggregated star-tree document
464
465
*/
465
466
public abstract Iterator <StarTreeDocument > sortAndAggregateSegmentDocuments (
466
- SequentialDocValuesIterator [] dimensionReaders ,
467
- List <SequentialDocValuesIterator > metricReaders
467
+ SequentialValuesIterator [] dimensionReaders ,
468
+ List <SequentialValuesIterator > metricReaders
468
469
) throws IOException ;
469
470
470
471
/**
@@ -483,8 +484,8 @@ public abstract Iterator<StarTreeDocument> generateStarTreeDocumentsForStarNode(
483
484
*/
484
485
protected StarTreeDocument getSegmentStarTreeDocument (
485
486
int currentDocId ,
486
- SequentialDocValuesIterator [] dimensionReaders ,
487
- List <SequentialDocValuesIterator > metricReaders
487
+ SequentialValuesIterator [] dimensionReaders ,
488
+ List <SequentialValuesIterator > metricReaders
488
489
) throws IOException {
489
490
Long [] dimensions = getStarTreeDimensionsFromSegment (currentDocId , dimensionReaders );
490
491
Object [] metrics = getStarTreeMetricsFromSegment (currentDocId , metricReaders );
@@ -497,12 +498,12 @@ protected StarTreeDocument getSegmentStarTreeDocument(
497
498
* @return dimension values for each of the star-tree dimension
498
499
* @throws IOException when we are unable to iterate to the next doc for the given dimension readers
499
500
*/
500
- Long [] getStarTreeDimensionsFromSegment (int currentDocId , SequentialDocValuesIterator [] dimensionReaders ) throws IOException {
501
+ Long [] getStarTreeDimensionsFromSegment (int currentDocId , SequentialValuesIterator [] dimensionReaders ) throws IOException {
501
502
Long [] dimensions = new Long [numDimensions ];
502
503
for (int i = 0 ; i < numDimensions ; i ++) {
503
504
if (dimensionReaders [i ] != null ) {
504
505
try {
505
- dimensionReaders [i ].nextDoc (currentDocId );
506
+ dimensionReaders [i ].nextEntry (currentDocId );
506
507
} catch (IOException e ) {
507
508
logger .error ("unable to iterate to next doc" , e );
508
509
throw new RuntimeException ("unable to iterate to next doc" , e );
@@ -524,13 +525,13 @@ Long[] getStarTreeDimensionsFromSegment(int currentDocId, SequentialDocValuesIte
524
525
* @return metric values for each of the star-tree metric
525
526
* @throws IOException when we are unable to iterate to the next doc for the given metric readers
526
527
*/
527
- private Object [] getStarTreeMetricsFromSegment (int currentDocId , List <SequentialDocValuesIterator > metricsReaders ) throws IOException {
528
+ private Object [] getStarTreeMetricsFromSegment (int currentDocId , List <SequentialValuesIterator > metricsReaders ) throws IOException {
528
529
Object [] metrics = new Object [numMetrics ];
529
530
for (int i = 0 ; i < numMetrics ; i ++) {
530
- SequentialDocValuesIterator metricStatReader = metricsReaders .get (i );
531
+ SequentialValuesIterator metricStatReader = metricsReaders .get (i );
531
532
if (metricStatReader != null ) {
532
533
try {
533
- metricStatReader .nextDoc (currentDocId );
534
+ metricStatReader .nextEntry (currentDocId );
534
535
} catch (IOException e ) {
535
536
logger .error ("unable to iterate to next doc" , e );
536
537
throw new RuntimeException ("unable to iterate to next doc" , e );
@@ -661,18 +662,18 @@ public StarTreeDocument reduceStarTreeDocuments(StarTreeDocument aggregatedDocum
661
662
/**
662
663
* Converts numericDocValues to sortedNumericDocValues and returns SequentialDocValuesIterator
663
664
*/
664
- private SequentialDocValuesIterator getIteratorForNumericField (
665
+ private SequentialValuesIterator getIteratorForNumericField (
665
666
Map <String , DocValuesProducer > fieldProducerMap ,
666
667
FieldInfo fieldInfo ,
667
668
String name
668
669
) throws IOException {
669
670
if (fieldInfo == null ) {
670
671
fieldInfo = getFieldInfo (name , DocValuesType .NUMERIC );
671
672
}
672
- SequentialDocValuesIterator sequentialDocValuesIterator ;
673
+ SequentialValuesIterator sequentialDocValuesIterator ;
673
674
assert fieldProducerMap .containsKey (fieldInfo .name );
674
- sequentialDocValuesIterator = new SequentialDocValuesIterator (
675
- DocValues .singleton (fieldProducerMap .get (fieldInfo .name ).getNumeric (fieldInfo ))
675
+ sequentialDocValuesIterator = new SequentialValuesIterator (
676
+ new SortedNumericStarTreeValuesIterator ( DocValues .singleton (fieldProducerMap .get (fieldInfo .name ).getNumeric (fieldInfo ) ))
676
677
);
677
678
return sequentialDocValuesIterator ;
678
679
}
0 commit comments