siddharthteotia commented on a change in pull request #5013: For RANGE 
predicate queries touching offline segments, use sorted inverted index if the 
column is sorted
URL: https://github.com/apache/incubator-pinot/pull/5013#discussion_r370883057
 
 

 ##########
 File path: 
pinot-core/src/main/java/org/apache/pinot/core/operator/filter/FilterOperatorUtils.java
 ##########
 @@ -56,16 +57,23 @@ public static BaseFilterOperator 
getLeafFilterOperator(PredicateEvaluator predic
     // Use inverted index if the predicate type is not RANGE or REGEXP_LIKE 
for efficiency
     DataSourceMetadata dataSourceMetadata = dataSource.getDataSourceMetadata();
     Predicate.Type predicateType = predicateEvaluator.getPredicateType();
-    if (dataSourceMetadata.hasInvertedIndex() && (predicateType != 
Predicate.Type.RANGE) && (predicateType
-        != Predicate.Type.REGEXP_LIKE)) {
-      if (dataSourceMetadata.isSorted()) {
+    if (dataSourceMetadata.hasInvertedIndex() && (predicateType != 
Predicate.Type.REGEXP_LIKE)) {
+      if (shouldUseSortedInvertedIndexOperator(dataSource, predicateType)) {
         return new SortedInvertedIndexBasedFilterOperator(predicateEvaluator, 
dataSource, startDocId, endDocId);
-      } else {
+      } else if (predicateType != Predicate.Type.RANGE) {
+        // TODO: add support for bitmap inverted index operator can be used 
for RANGE predicate
         return new BitmapBasedFilterOperator(predicateEvaluator, dataSource, 
startDocId, endDocId);
       }
-    } else {
-      return new ScanBasedFilterOperator(predicateEvaluator, dataSource, 
startDocId, endDocId);
     }
+    return new ScanBasedFilterOperator(predicateEvaluator, dataSource, 
startDocId, endDocId);
+  }
+
+  private static boolean shouldUseSortedInvertedIndexOperator(DataSource 
dataSource, Predicate.Type predicateType) {
+    boolean isSorted = dataSource.getDataSourceMetadata().isSorted();
+    // we can sorted inverted index if:
+    // 1. column is sorted AND
+    // 2. predicate is not RANGE OR predicate is RANGE but this physical plan 
is being built for offline segment
 
 Review comment:
   If the column is sorted, we can use sorted index if there is no RANGE 
predicate -- we do this today.
   
   If the column is sorted and there is RANGE predicate, use sorted index only 
for offline segments.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to