You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by kh...@apache.org on 2023/03/28 06:47:16 UTC

[pinot] branch master updated: Index spi: all types (#10193)

This is an automated email from the ASF dual-hosted git repository.

kharekartik pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git


The following commit(s) were added to refs/heads/master by this push:
     new 1d02d0eb50 Index spi: all types (#10193)
1d02d0eb50 is described below

commit 1d02d0eb50da0cc32d08dfee3676f98c3cdbe8f4
Author: Gonzalo Ortiz Jaureguizar <go...@users.noreply.github.com>
AuthorDate: Tue Mar 28 08:47:08 2023 +0200

    Index spi: all types (#10193)
    
    * Draft commit with the IndexType draft
    
    * Draft commit with the IndexService draft
    
    * Draft commit with simplified version of all index types
    
    * Simplify IndexType with tons of UnsupportedOperationException
    
    * Remove BloomIndexType to make this code compile
    
    * Recover simplified BloomIndexType
    
    * Fix an error on IndexService
    
    * Add all types to StandardIndexes
    
    * Fix two checkstyle issues
    
    * supress unchecked cast warning in StandardIndexes.java
    
    * Remove segment dir param from IndexReaderFactory.read
    
    * Improve javadoc on IndexType.deserialize
    
    * Declare a constant before attributes
    
    * Remove unused @JsonIgnore annotation
    
    * Remove IndexDeclaration. Use the single config deserialize method instead
    
    * Improve BloomIndexType example
    
    * remove alternativeSingleValue method from IndexCreator
    
    * Change FieldIndexConfigs.Builder to do not accept null configs
    
    * Rename add methods in IndexCreator as `add`
    
    * Rename IndexType.deserialize as IndexType.getConfig
    
    * Rename IndexReaderFactory.read as IndexReaderFactory.createIndexReader
    
    * Remove copy of IndexHandler
    
    * Move IndexHandler to org.apache.pinot.segment.spi.index from org.apache.pinot.segment.local.segment.index.loader
    
    * Add FieldIndexConfigs.toString
    
    * Add javadoc
    
    * Remove indexName concept
    
    * Update code to index-spi
    
    * Update all index types to have implementation all required methods
    
    * Apply some stetical changes recommended in the PR
    
    * Improve javadoc
    
    * Fix typo in javadoc
    
    * Add some changes included in index-spi-all-types
    
    * Add javadoc to StandardIndexes
    
    * Add javadoc and make _allIndexes immutable
    
    * Add javadoc on IndexPlugin
    
    * Remove unused import
    
    * Add more javadoc
    
    * Define standard index ids in StandardIndexes
    
    * Add a map from id to index types
    
    * Add exit_criteria to TODO comment in OnHeapGuavaBloomFilterCreator
    
    * Changed javadoc for IndexService
    
    * Rename get and getOrThrow as getOptional or get
    
    * Cache reader factory instance
    
    * Make DEFAULT final class public
    
    * Make IndexService private
    
    * make constructor private
    
    * add DEFAULT_RANGE_INDEX_VERSION
    
    * add empty lines between class decl, contant and constructor
---
 .../local/segment/index/bloom/BloomIndexType.java  |   3 +-
 .../index/dictionary/DictionaryIndexPlugin.java    |  32 +++++++
 .../index/dictionary/DictionaryIndexType.java      |  92 ++++++++++++++++++
 .../segment/index/forward/ForwardIndexPlugin.java  |  32 +++++++
 .../segment/index/forward/ForwardIndexType.java    | 105 +++++++++++++++++++++
 .../local/segment/index/fst/FstIndexPlugin.java    |  32 +++++++
 .../local/segment/index/fst/FstIndexType.java      |  92 ++++++++++++++++++
 .../local/segment/index/h3/H3IndexPlugin.java      |  32 +++++++
 .../local/segment/index/h3/H3IndexType.java        |  93 ++++++++++++++++++
 .../index/inverted/InvertedIndexPlugin.java        |  32 +++++++
 .../segment/index/inverted/InvertedIndexType.java  |  92 ++++++++++++++++++
 .../local/segment/index/json/JsonIndexPlugin.java  |  32 +++++++
 .../local/segment/index/json/JsonIndexType.java    |  92 ++++++++++++++++++
 .../index/nullvalue/NullValueIndexPlugin.java      |  32 +++++++
 .../index/nullvalue/NullValueIndexType.java        |  93 ++++++++++++++++++
 .../segment/index/range/RangeIndexPlugin.java      |  32 +++++++
 .../local/segment/index/range/RangeIndexType.java  |  99 +++++++++++++++++++
 .../local/segment/index/text/TextIndexPlugin.java  |  32 +++++++
 .../local/segment/index/text/TextIndexType.java    |  93 ++++++++++++++++++
 .../pinot/segment/spi/index/StandardIndexes.java   |  53 ++++++++++-
 20 files changed, 1189 insertions(+), 6 deletions(-)

diff --git a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/bloom/BloomIndexType.java b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/bloom/BloomIndexType.java
index 4d8ae842e9..402f39b380 100644
--- a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/bloom/BloomIndexType.java
+++ b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/bloom/BloomIndexType.java
@@ -31,6 +31,7 @@ import org.apache.pinot.segment.spi.index.FieldIndexConfigs;
 import org.apache.pinot.segment.spi.index.IndexHandler;
 import org.apache.pinot.segment.spi.index.IndexReaderFactory;
 import org.apache.pinot.segment.spi.index.IndexType;
+import org.apache.pinot.segment.spi.index.StandardIndexes;
 import org.apache.pinot.segment.spi.index.creator.BloomFilterCreator;
 import org.apache.pinot.segment.spi.index.reader.BloomFilterReader;
 import org.apache.pinot.segment.spi.memory.PinotDataBuffer;
@@ -44,7 +45,7 @@ public class BloomIndexType implements IndexType<BloomFilterConfig, BloomFilterR
 
   @Override
   public String getId() {
-    return "bloom_filter";
+    return StandardIndexes.BLOOM_FILTER_ID;
   }
 
   @Override
diff --git a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/dictionary/DictionaryIndexPlugin.java b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/dictionary/DictionaryIndexPlugin.java
new file mode 100644
index 0000000000..ccb3a63bf0
--- /dev/null
+++ b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/dictionary/DictionaryIndexPlugin.java
@@ -0,0 +1,32 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF 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.apache.pinot.segment.local.segment.index.dictionary;
+
+import com.google.auto.service.AutoService;
+import org.apache.pinot.segment.spi.index.IndexPlugin;
+
+
+@AutoService(IndexPlugin.class)
+public class DictionaryIndexPlugin implements IndexPlugin<DictionaryIndexType> {
+  @Override
+  public DictionaryIndexType getIndexType() {
+    return DictionaryIndexType.INSTANCE;
+  }
+}
diff --git a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/dictionary/DictionaryIndexType.java b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/dictionary/DictionaryIndexType.java
new file mode 100644
index 0000000000..23eaf046e1
--- /dev/null
+++ b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/dictionary/DictionaryIndexType.java
@@ -0,0 +1,92 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF 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.apache.pinot.segment.local.segment.index.dictionary;
+
+import java.util.Map;
+import javax.annotation.Nullable;
+import org.apache.pinot.segment.spi.ColumnMetadata;
+import org.apache.pinot.segment.spi.V1Constants;
+import org.apache.pinot.segment.spi.creator.IndexCreationContext;
+import org.apache.pinot.segment.spi.index.FieldIndexConfigs;
+import org.apache.pinot.segment.spi.index.IndexCreator;
+import org.apache.pinot.segment.spi.index.IndexHandler;
+import org.apache.pinot.segment.spi.index.IndexReader;
+import org.apache.pinot.segment.spi.index.IndexReaderFactory;
+import org.apache.pinot.segment.spi.index.IndexType;
+import org.apache.pinot.segment.spi.index.StandardIndexes;
+import org.apache.pinot.segment.spi.store.SegmentDirectory;
+import org.apache.pinot.spi.config.table.IndexConfig;
+import org.apache.pinot.spi.config.table.TableConfig;
+import org.apache.pinot.spi.data.Schema;
+
+
+public class DictionaryIndexType implements IndexType<IndexConfig, IndexReader, IndexCreator> {
+  public static final DictionaryIndexType INSTANCE = new DictionaryIndexType();
+
+  private DictionaryIndexType() {
+  }
+
+  @Override
+  public String getId() {
+    return StandardIndexes.DICTIONARY_ID;
+  }
+
+  @Override
+  public Class<IndexConfig> getIndexConfigClass() {
+    return IndexConfig.class;
+  }
+
+  @Override
+  public IndexConfig getDefaultConfig() {
+    return IndexConfig.DISABLED;
+  }
+
+  @Override
+  public IndexConfig getConfig(TableConfig tableConfig, Schema schema) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public IndexCreator createIndexCreator(IndexCreationContext context, IndexConfig indexConfig)
+      throws Exception {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public IndexReaderFactory<IndexReader> getReaderFactory() {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public IndexHandler createIndexHandler(SegmentDirectory segmentDirectory, Map<String, FieldIndexConfigs> configsByCol,
+      @Nullable Schema schema, @Nullable TableConfig tableConfig) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public String getFileExtension(ColumnMetadata columnMetadata) {
+    return V1Constants.Dict.FILE_EXTENSION;
+  }
+
+  @Override
+  public String toString() {
+    return getId();
+  }
+}
diff --git a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/forward/ForwardIndexPlugin.java b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/forward/ForwardIndexPlugin.java
new file mode 100644
index 0000000000..486d4dc359
--- /dev/null
+++ b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/forward/ForwardIndexPlugin.java
@@ -0,0 +1,32 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF 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.apache.pinot.segment.local.segment.index.forward;
+
+import com.google.auto.service.AutoService;
+import org.apache.pinot.segment.spi.index.IndexPlugin;
+
+
+@AutoService(IndexPlugin.class)
+public class ForwardIndexPlugin implements IndexPlugin<ForwardIndexType> {
+  @Override
+  public ForwardIndexType getIndexType() {
+    return ForwardIndexType.INSTANCE;
+  }
+}
diff --git a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/forward/ForwardIndexType.java b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/forward/ForwardIndexType.java
new file mode 100644
index 0000000000..5cdb7de8e2
--- /dev/null
+++ b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/forward/ForwardIndexType.java
@@ -0,0 +1,105 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF 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.apache.pinot.segment.local.segment.index.forward;
+
+import java.util.Map;
+import javax.annotation.Nullable;
+import org.apache.pinot.segment.spi.ColumnMetadata;
+import org.apache.pinot.segment.spi.V1Constants;
+import org.apache.pinot.segment.spi.creator.IndexCreationContext;
+import org.apache.pinot.segment.spi.index.FieldIndexConfigs;
+import org.apache.pinot.segment.spi.index.IndexCreator;
+import org.apache.pinot.segment.spi.index.IndexHandler;
+import org.apache.pinot.segment.spi.index.IndexReader;
+import org.apache.pinot.segment.spi.index.IndexReaderFactory;
+import org.apache.pinot.segment.spi.index.IndexType;
+import org.apache.pinot.segment.spi.index.StandardIndexes;
+import org.apache.pinot.segment.spi.store.SegmentDirectory;
+import org.apache.pinot.spi.config.table.IndexConfig;
+import org.apache.pinot.spi.config.table.TableConfig;
+import org.apache.pinot.spi.data.Schema;
+
+
+public class ForwardIndexType implements IndexType<IndexConfig, IndexReader, IndexCreator> {
+
+  public static final ForwardIndexType INSTANCE = new ForwardIndexType();
+
+  private ForwardIndexType() {
+  }
+
+  @Override
+  public String getId() {
+    return StandardIndexes.FORWARD_ID;
+  }
+
+  @Override
+  public Class<IndexConfig> getIndexConfigClass() {
+    return null;
+  }
+
+  @Override
+  public IndexConfig getDefaultConfig() {
+    return IndexConfig.ENABLED;
+  }
+
+  @Override
+  public IndexConfig getConfig(TableConfig tableConfig, Schema schema) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public IndexCreator createIndexCreator(IndexCreationContext context, IndexConfig indexConfig)
+      throws Exception {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public IndexReaderFactory<IndexReader> getReaderFactory() {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public String getFileExtension(ColumnMetadata columnMetadata) {
+    if (columnMetadata.isSingleValue()) {
+      if (!columnMetadata.hasDictionary()) {
+        return V1Constants.Indexes.RAW_SV_FORWARD_INDEX_FILE_EXTENSION;
+      } else if (columnMetadata.isSorted()) {
+        return V1Constants.Indexes.SORTED_SV_FORWARD_INDEX_FILE_EXTENSION;
+      } else {
+        return V1Constants.Indexes.UNSORTED_SV_FORWARD_INDEX_FILE_EXTENSION;
+      }
+    } else if (!columnMetadata.hasDictionary()) {
+      return V1Constants.Indexes.RAW_MV_FORWARD_INDEX_FILE_EXTENSION;
+    } else {
+      return V1Constants.Indexes.UNSORTED_MV_FORWARD_INDEX_FILE_EXTENSION;
+    }
+  }
+
+  @Override
+  public IndexHandler createIndexHandler(SegmentDirectory segmentDirectory, Map<String, FieldIndexConfigs> configsByCol,
+      @Nullable Schema schema, @Nullable TableConfig tableConfig) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public String toString() {
+    return getId();
+  }
+}
diff --git a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/fst/FstIndexPlugin.java b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/fst/FstIndexPlugin.java
new file mode 100644
index 0000000000..fec6c05057
--- /dev/null
+++ b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/fst/FstIndexPlugin.java
@@ -0,0 +1,32 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF 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.apache.pinot.segment.local.segment.index.fst;
+
+import com.google.auto.service.AutoService;
+import org.apache.pinot.segment.spi.index.IndexPlugin;
+
+
+@AutoService(IndexPlugin.class)
+public class FstIndexPlugin implements IndexPlugin<FstIndexType> {
+  @Override
+  public FstIndexType getIndexType() {
+    return FstIndexType.INSTANCE;
+  }
+}
diff --git a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/fst/FstIndexType.java b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/fst/FstIndexType.java
new file mode 100644
index 0000000000..227b7f6f96
--- /dev/null
+++ b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/fst/FstIndexType.java
@@ -0,0 +1,92 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF 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.apache.pinot.segment.local.segment.index.fst;
+
+import java.util.Map;
+import javax.annotation.Nullable;
+import org.apache.pinot.segment.spi.ColumnMetadata;
+import org.apache.pinot.segment.spi.V1Constants;
+import org.apache.pinot.segment.spi.creator.IndexCreationContext;
+import org.apache.pinot.segment.spi.index.FieldIndexConfigs;
+import org.apache.pinot.segment.spi.index.IndexCreator;
+import org.apache.pinot.segment.spi.index.IndexHandler;
+import org.apache.pinot.segment.spi.index.IndexReader;
+import org.apache.pinot.segment.spi.index.IndexReaderFactory;
+import org.apache.pinot.segment.spi.index.IndexType;
+import org.apache.pinot.segment.spi.index.StandardIndexes;
+import org.apache.pinot.segment.spi.store.SegmentDirectory;
+import org.apache.pinot.spi.config.table.IndexConfig;
+import org.apache.pinot.spi.config.table.TableConfig;
+import org.apache.pinot.spi.data.Schema;
+
+
+public class FstIndexType implements IndexType<IndexConfig, IndexReader, IndexCreator> {
+  public static final FstIndexType INSTANCE = new FstIndexType();
+
+  private FstIndexType() {
+  }
+
+  @Override
+  public String getId() {
+    return StandardIndexes.FST_ID;
+  }
+
+  @Override
+  public Class<IndexConfig> getIndexConfigClass() {
+    return IndexConfig.class;
+  }
+
+  @Override
+  public IndexConfig getDefaultConfig() {
+    return IndexConfig.DISABLED;
+  }
+
+  @Override
+  public IndexConfig getConfig(TableConfig tableConfig, Schema schema) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public IndexCreator createIndexCreator(IndexCreationContext context, IndexConfig indexConfig)
+      throws Exception {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public IndexReaderFactory<IndexReader> getReaderFactory() {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public IndexHandler createIndexHandler(SegmentDirectory segmentDirectory, Map<String, FieldIndexConfigs> configsByCol,
+      @Nullable Schema schema, @Nullable TableConfig tableConfig) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public String getFileExtension(ColumnMetadata columnMetadata) {
+    return V1Constants.Indexes.FST_INDEX_FILE_EXTENSION;
+  }
+
+  @Override
+  public String toString() {
+    return getId();
+  }
+}
diff --git a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/h3/H3IndexPlugin.java b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/h3/H3IndexPlugin.java
new file mode 100644
index 0000000000..854bcda08a
--- /dev/null
+++ b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/h3/H3IndexPlugin.java
@@ -0,0 +1,32 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF 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.apache.pinot.segment.local.segment.index.h3;
+
+import com.google.auto.service.AutoService;
+import org.apache.pinot.segment.spi.index.IndexPlugin;
+
+
+@AutoService(IndexPlugin.class)
+public class H3IndexPlugin implements IndexPlugin<H3IndexType> {
+  @Override
+  public H3IndexType getIndexType() {
+    return H3IndexType.INSTANCE;
+  }
+}
diff --git a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/h3/H3IndexType.java b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/h3/H3IndexType.java
new file mode 100644
index 0000000000..7438e7b08a
--- /dev/null
+++ b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/h3/H3IndexType.java
@@ -0,0 +1,93 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF 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.apache.pinot.segment.local.segment.index.h3;
+
+import java.util.Map;
+import javax.annotation.Nullable;
+import org.apache.pinot.segment.spi.ColumnMetadata;
+import org.apache.pinot.segment.spi.V1Constants;
+import org.apache.pinot.segment.spi.creator.IndexCreationContext;
+import org.apache.pinot.segment.spi.index.FieldIndexConfigs;
+import org.apache.pinot.segment.spi.index.IndexCreator;
+import org.apache.pinot.segment.spi.index.IndexHandler;
+import org.apache.pinot.segment.spi.index.IndexReader;
+import org.apache.pinot.segment.spi.index.IndexReaderFactory;
+import org.apache.pinot.segment.spi.index.IndexType;
+import org.apache.pinot.segment.spi.index.StandardIndexes;
+import org.apache.pinot.segment.spi.store.SegmentDirectory;
+import org.apache.pinot.spi.config.table.IndexConfig;
+import org.apache.pinot.spi.config.table.TableConfig;
+import org.apache.pinot.spi.data.Schema;
+
+
+public class H3IndexType implements IndexType<IndexConfig, IndexReader, IndexCreator> {
+
+  public static final H3IndexType INSTANCE = new H3IndexType();
+
+  private H3IndexType() {
+  }
+
+  @Override
+  public String getId() {
+    return StandardIndexes.H3_ID;
+  }
+
+  @Override
+  public Class<IndexConfig> getIndexConfigClass() {
+    return IndexConfig.class;
+  }
+
+  @Override
+  public IndexConfig getDefaultConfig() {
+    return IndexConfig.DISABLED;
+  }
+
+  @Override
+  public IndexConfig getConfig(TableConfig tableConfig, Schema schema) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public IndexCreator createIndexCreator(IndexCreationContext context, IndexConfig indexConfig)
+      throws Exception {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public IndexReaderFactory<IndexReader> getReaderFactory() {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public IndexHandler createIndexHandler(SegmentDirectory segmentDirectory, Map<String, FieldIndexConfigs> configsByCol,
+      @Nullable Schema schema, @Nullable TableConfig tableConfig) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public String getFileExtension(ColumnMetadata columnMetadata) {
+    return V1Constants.Indexes.H3_INDEX_FILE_EXTENSION;
+  }
+
+  @Override
+  public String toString() {
+    return getId();
+  }
+}
diff --git a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/inverted/InvertedIndexPlugin.java b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/inverted/InvertedIndexPlugin.java
new file mode 100644
index 0000000000..6fc4b3f54f
--- /dev/null
+++ b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/inverted/InvertedIndexPlugin.java
@@ -0,0 +1,32 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF 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.apache.pinot.segment.local.segment.index.inverted;
+
+import com.google.auto.service.AutoService;
+import org.apache.pinot.segment.spi.index.IndexPlugin;
+
+
+@AutoService(IndexPlugin.class)
+public class InvertedIndexPlugin implements IndexPlugin<InvertedIndexType> {
+  @Override
+  public InvertedIndexType getIndexType() {
+    return InvertedIndexType.INSTANCE;
+  }
+}
diff --git a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/inverted/InvertedIndexType.java b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/inverted/InvertedIndexType.java
new file mode 100644
index 0000000000..31761c208b
--- /dev/null
+++ b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/inverted/InvertedIndexType.java
@@ -0,0 +1,92 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF 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.apache.pinot.segment.local.segment.index.inverted;
+
+import java.util.Map;
+import javax.annotation.Nullable;
+import org.apache.pinot.segment.spi.ColumnMetadata;
+import org.apache.pinot.segment.spi.V1Constants;
+import org.apache.pinot.segment.spi.creator.IndexCreationContext;
+import org.apache.pinot.segment.spi.index.FieldIndexConfigs;
+import org.apache.pinot.segment.spi.index.IndexCreator;
+import org.apache.pinot.segment.spi.index.IndexHandler;
+import org.apache.pinot.segment.spi.index.IndexReader;
+import org.apache.pinot.segment.spi.index.IndexReaderFactory;
+import org.apache.pinot.segment.spi.index.IndexType;
+import org.apache.pinot.segment.spi.index.StandardIndexes;
+import org.apache.pinot.segment.spi.store.SegmentDirectory;
+import org.apache.pinot.spi.config.table.IndexConfig;
+import org.apache.pinot.spi.config.table.TableConfig;
+import org.apache.pinot.spi.data.Schema;
+
+
+public class InvertedIndexType implements IndexType<IndexConfig, IndexReader, IndexCreator> {
+  public static final InvertedIndexType INSTANCE = new InvertedIndexType();
+
+  private InvertedIndexType() {
+  }
+
+  @Override
+  public String getId() {
+    return StandardIndexes.INVERTED_ID;
+  }
+
+  @Override
+  public Class<IndexConfig> getIndexConfigClass() {
+    return IndexConfig.class;
+  }
+
+  @Override
+  public IndexConfig getDefaultConfig() {
+    return IndexConfig.DISABLED;
+  }
+
+  @Override
+  public IndexConfig getConfig(TableConfig tableConfig, Schema schema) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public IndexCreator createIndexCreator(IndexCreationContext context, IndexConfig indexConfig)
+      throws Exception {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public IndexReaderFactory<IndexReader> getReaderFactory() {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public IndexHandler createIndexHandler(SegmentDirectory segmentDirectory, Map<String, FieldIndexConfigs> configsByCol,
+      @Nullable Schema schema, @Nullable TableConfig tableConfig) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public String getFileExtension(ColumnMetadata columnMetadata) {
+    return V1Constants.Indexes.BITMAP_INVERTED_INDEX_FILE_EXTENSION;
+  }
+
+  @Override
+  public String toString() {
+    return getId();
+  }
+}
diff --git a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/json/JsonIndexPlugin.java b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/json/JsonIndexPlugin.java
new file mode 100644
index 0000000000..9e05af6046
--- /dev/null
+++ b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/json/JsonIndexPlugin.java
@@ -0,0 +1,32 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF 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.apache.pinot.segment.local.segment.index.json;
+
+import com.google.auto.service.AutoService;
+import org.apache.pinot.segment.spi.index.IndexPlugin;
+
+
+@AutoService(IndexPlugin.class)
+public class JsonIndexPlugin implements IndexPlugin<JsonIndexType> {
+  @Override
+  public JsonIndexType getIndexType() {
+    return JsonIndexType.INSTANCE;
+  }
+}
diff --git a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/json/JsonIndexType.java b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/json/JsonIndexType.java
new file mode 100644
index 0000000000..e7ab2f74ee
--- /dev/null
+++ b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/json/JsonIndexType.java
@@ -0,0 +1,92 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF 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.apache.pinot.segment.local.segment.index.json;
+
+import java.util.Map;
+import javax.annotation.Nullable;
+import org.apache.pinot.segment.spi.ColumnMetadata;
+import org.apache.pinot.segment.spi.V1Constants;
+import org.apache.pinot.segment.spi.creator.IndexCreationContext;
+import org.apache.pinot.segment.spi.index.FieldIndexConfigs;
+import org.apache.pinot.segment.spi.index.IndexCreator;
+import org.apache.pinot.segment.spi.index.IndexHandler;
+import org.apache.pinot.segment.spi.index.IndexReader;
+import org.apache.pinot.segment.spi.index.IndexReaderFactory;
+import org.apache.pinot.segment.spi.index.IndexType;
+import org.apache.pinot.segment.spi.index.StandardIndexes;
+import org.apache.pinot.segment.spi.store.SegmentDirectory;
+import org.apache.pinot.spi.config.table.IndexConfig;
+import org.apache.pinot.spi.config.table.TableConfig;
+import org.apache.pinot.spi.data.Schema;
+
+
+public class JsonIndexType implements IndexType<IndexConfig, IndexReader, IndexCreator> {
+  public static final JsonIndexType INSTANCE = new JsonIndexType();
+
+  private JsonIndexType() {
+  }
+
+  @Override
+  public String getId() {
+    return StandardIndexes.JSON_ID;
+  }
+
+  @Override
+  public Class<IndexConfig> getIndexConfigClass() {
+    return IndexConfig.class;
+  }
+
+  @Override
+  public IndexConfig getDefaultConfig() {
+    return IndexConfig.DISABLED;
+  }
+
+  @Override
+  public IndexConfig getConfig(TableConfig tableConfig, Schema schema) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public IndexCreator createIndexCreator(IndexCreationContext context, IndexConfig indexConfig)
+      throws Exception {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public IndexReaderFactory<IndexReader> getReaderFactory() {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public String getFileExtension(ColumnMetadata columnMetadata) {
+    return V1Constants.Indexes.JSON_INDEX_FILE_EXTENSION;
+  }
+
+  @Override
+  public IndexHandler createIndexHandler(SegmentDirectory segmentDirectory, Map<String, FieldIndexConfigs> configsByCol,
+      @Nullable Schema schema, @Nullable TableConfig tableConfig) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public String toString() {
+    return getId();
+  }
+}
diff --git a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/nullvalue/NullValueIndexPlugin.java b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/nullvalue/NullValueIndexPlugin.java
new file mode 100644
index 0000000000..56d322ae8b
--- /dev/null
+++ b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/nullvalue/NullValueIndexPlugin.java
@@ -0,0 +1,32 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF 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.apache.pinot.segment.local.segment.index.nullvalue;
+
+import com.google.auto.service.AutoService;
+import org.apache.pinot.segment.spi.index.IndexPlugin;
+
+
+@AutoService(IndexPlugin.class)
+public class NullValueIndexPlugin implements IndexPlugin<NullValueIndexType> {
+  @Override
+  public NullValueIndexType getIndexType() {
+    return NullValueIndexType.INSTANCE;
+  }
+}
diff --git a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/nullvalue/NullValueIndexType.java b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/nullvalue/NullValueIndexType.java
new file mode 100644
index 0000000000..e66088fea0
--- /dev/null
+++ b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/nullvalue/NullValueIndexType.java
@@ -0,0 +1,93 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF 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.apache.pinot.segment.local.segment.index.nullvalue;
+
+import java.util.Map;
+import javax.annotation.Nullable;
+import org.apache.pinot.segment.spi.ColumnMetadata;
+import org.apache.pinot.segment.spi.V1Constants;
+import org.apache.pinot.segment.spi.creator.IndexCreationContext;
+import org.apache.pinot.segment.spi.index.FieldIndexConfigs;
+import org.apache.pinot.segment.spi.index.IndexCreator;
+import org.apache.pinot.segment.spi.index.IndexHandler;
+import org.apache.pinot.segment.spi.index.IndexReader;
+import org.apache.pinot.segment.spi.index.IndexReaderFactory;
+import org.apache.pinot.segment.spi.index.IndexType;
+import org.apache.pinot.segment.spi.index.StandardIndexes;
+import org.apache.pinot.segment.spi.store.SegmentDirectory;
+import org.apache.pinot.spi.config.table.IndexConfig;
+import org.apache.pinot.spi.config.table.TableConfig;
+import org.apache.pinot.spi.data.Schema;
+
+
+public class NullValueIndexType implements IndexType<IndexConfig, IndexReader, IndexCreator> {
+
+  public static final NullValueIndexType INSTANCE = new NullValueIndexType();
+
+  private NullValueIndexType() {
+  }
+
+  @Override
+  public String getId() {
+    return StandardIndexes.NULL_VALUE_VECTOR_ID;
+  }
+
+  @Override
+  public Class<IndexConfig> getIndexConfigClass() {
+    return IndexConfig.class;
+  }
+
+  @Override
+  public IndexConfig getDefaultConfig() {
+    return IndexConfig.DISABLED;
+  }
+
+  @Override
+  public IndexConfig getConfig(TableConfig tableConfig, Schema schema) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public IndexCreator createIndexCreator(IndexCreationContext context, IndexConfig indexConfig)
+      throws Exception {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public IndexReaderFactory<IndexReader> getReaderFactory() {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public IndexHandler createIndexHandler(SegmentDirectory segmentDirectory, Map<String, FieldIndexConfigs> configsByCol,
+      @Nullable Schema schema, @Nullable TableConfig tableConfig) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public String getFileExtension(ColumnMetadata columnMetadata) {
+    return V1Constants.Indexes.NULLVALUE_VECTOR_FILE_EXTENSION;
+  }
+
+  @Override
+  public String toString() {
+    return getId();
+  }
+}
diff --git a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/range/RangeIndexPlugin.java b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/range/RangeIndexPlugin.java
new file mode 100644
index 0000000000..d838495c68
--- /dev/null
+++ b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/range/RangeIndexPlugin.java
@@ -0,0 +1,32 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF 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.apache.pinot.segment.local.segment.index.range;
+
+import com.google.auto.service.AutoService;
+import org.apache.pinot.segment.spi.index.IndexPlugin;
+
+
+@AutoService(IndexPlugin.class)
+public class RangeIndexPlugin implements IndexPlugin<RangeIndexType> {
+  @Override
+  public RangeIndexType getIndexType() {
+    return RangeIndexType.INSTANCE;
+  }
+}
diff --git a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/range/RangeIndexType.java b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/range/RangeIndexType.java
new file mode 100644
index 0000000000..3b6c960e69
--- /dev/null
+++ b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/range/RangeIndexType.java
@@ -0,0 +1,99 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF 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.apache.pinot.segment.local.segment.index.range;
+
+import java.util.Map;
+import javax.annotation.Nullable;
+import org.apache.pinot.segment.spi.ColumnMetadata;
+import org.apache.pinot.segment.spi.V1Constants;
+import org.apache.pinot.segment.spi.creator.IndexCreationContext;
+import org.apache.pinot.segment.spi.index.FieldIndexConfigs;
+import org.apache.pinot.segment.spi.index.IndexCreator;
+import org.apache.pinot.segment.spi.index.IndexHandler;
+import org.apache.pinot.segment.spi.index.IndexReader;
+import org.apache.pinot.segment.spi.index.IndexReaderFactory;
+import org.apache.pinot.segment.spi.index.IndexType;
+import org.apache.pinot.segment.spi.index.StandardIndexes;
+import org.apache.pinot.segment.spi.store.SegmentDirectory;
+import org.apache.pinot.spi.config.table.IndexConfig;
+import org.apache.pinot.spi.config.table.TableConfig;
+import org.apache.pinot.spi.data.Schema;
+
+
+public class RangeIndexType implements IndexType<IndexConfig, IndexReader, IndexCreator> {
+
+  /**
+   * The default range index version used when not specified in the TableConfig.
+   *
+   * This value should be equal to the one used in {@link org.apache.pinot.spi.config.table.IndexingConfig}
+   */
+  public static final int DEFAULT_RANGE_INDEX_VERSION = 2;
+  public static final RangeIndexType INSTANCE = new RangeIndexType();
+
+  private RangeIndexType() {
+  }
+
+  @Override
+  public String getId() {
+    return StandardIndexes.RANGE_ID;
+  }
+
+  @Override
+  public Class<IndexConfig> getIndexConfigClass() {
+    return IndexConfig.class;
+  }
+
+  @Override
+  public IndexConfig getDefaultConfig() {
+    return IndexConfig.DISABLED;
+  }
+
+  @Override
+  public IndexConfig getConfig(TableConfig tableConfig, Schema schema) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public IndexCreator createIndexCreator(IndexCreationContext context, IndexConfig indexConfig)
+      throws Exception {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public IndexReaderFactory<IndexReader> getReaderFactory() {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public String getFileExtension(ColumnMetadata columnMetadata) {
+    return V1Constants.Indexes.BITMAP_RANGE_INDEX_FILE_EXTENSION;
+  }
+
+  @Override
+  public IndexHandler createIndexHandler(SegmentDirectory segmentDirectory, Map<String, FieldIndexConfigs> configsByCol,
+      @Nullable Schema schema, @Nullable TableConfig tableConfig) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public String toString() {
+    return getId();
+  }
+}
diff --git a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/text/TextIndexPlugin.java b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/text/TextIndexPlugin.java
new file mode 100644
index 0000000000..ec509f7ab4
--- /dev/null
+++ b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/text/TextIndexPlugin.java
@@ -0,0 +1,32 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF 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.apache.pinot.segment.local.segment.index.text;
+
+import com.google.auto.service.AutoService;
+import org.apache.pinot.segment.spi.index.IndexPlugin;
+
+
+@AutoService(IndexPlugin.class)
+public class TextIndexPlugin implements IndexPlugin<TextIndexType> {
+  @Override
+  public TextIndexType getIndexType() {
+    return TextIndexType.INSTANCE;
+  }
+}
diff --git a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/text/TextIndexType.java b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/text/TextIndexType.java
new file mode 100644
index 0000000000..53a9700869
--- /dev/null
+++ b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/text/TextIndexType.java
@@ -0,0 +1,93 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF 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.apache.pinot.segment.local.segment.index.text;
+
+import java.util.Map;
+import javax.annotation.Nullable;
+import org.apache.pinot.segment.spi.ColumnMetadata;
+import org.apache.pinot.segment.spi.V1Constants;
+import org.apache.pinot.segment.spi.creator.IndexCreationContext;
+import org.apache.pinot.segment.spi.index.FieldIndexConfigs;
+import org.apache.pinot.segment.spi.index.IndexCreator;
+import org.apache.pinot.segment.spi.index.IndexHandler;
+import org.apache.pinot.segment.spi.index.IndexReader;
+import org.apache.pinot.segment.spi.index.IndexReaderFactory;
+import org.apache.pinot.segment.spi.index.IndexType;
+import org.apache.pinot.segment.spi.index.StandardIndexes;
+import org.apache.pinot.segment.spi.store.SegmentDirectory;
+import org.apache.pinot.spi.config.table.IndexConfig;
+import org.apache.pinot.spi.config.table.TableConfig;
+import org.apache.pinot.spi.data.Schema;
+
+
+public class TextIndexType implements IndexType<IndexConfig, IndexReader, IndexCreator> {
+
+  public static final TextIndexType INSTANCE = new TextIndexType();
+
+  private TextIndexType() {
+  }
+
+  @Override
+  public String getId() {
+    return StandardIndexes.TEXT_ID;
+  }
+
+  @Override
+  public Class<IndexConfig> getIndexConfigClass() {
+    return IndexConfig.class;
+  }
+
+  @Override
+  public IndexConfig getDefaultConfig() {
+    return IndexConfig.DISABLED;
+  }
+
+  @Override
+  public IndexConfig getConfig(TableConfig tableConfig, Schema schema) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public IndexCreator createIndexCreator(IndexCreationContext context, IndexConfig indexConfig)
+      throws Exception {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public IndexReaderFactory<IndexReader> getReaderFactory() {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public IndexHandler createIndexHandler(SegmentDirectory segmentDirectory, Map<String, FieldIndexConfigs> configsByCol,
+      @Nullable Schema schema, @Nullable TableConfig tableConfig) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public String getFileExtension(ColumnMetadata columnMetadata) {
+    return V1Constants.Indexes.LUCENE_TEXT_INDEX_FILE_EXTENSION;
+  }
+
+  @Override
+  public String toString() {
+    return getId();
+  }
+}
diff --git a/pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/index/StandardIndexes.java b/pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/index/StandardIndexes.java
index caad4606fe..ec790ca6da 100644
--- a/pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/index/StandardIndexes.java
+++ b/pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/index/StandardIndexes.java
@@ -39,21 +39,64 @@ import org.apache.pinot.spi.config.table.BloomFilterConfig;
  *   included in a Pinot distribution. {@link StandardIndexes} contains one get method for each standard index,
  *   providing a typesafe way to get these references. Instead of having to write something like
  *   {@code (IndexType<BloomFilterConfig, BloomFilterReader, IndexCreator>)
- *   IndexService.getInstance().getOrThrow("bloom_filter")},
+ *   IndexService.getInstance().get("bloom_filter")},
  *   a caller can simply use {@link StandardIndexes#bloomFilter()}
  * </p>
  */
 @SuppressWarnings("unchecked")
 public class StandardIndexes {
+  public static final String FORWARD_ID = "forward_index";
+  public static final String DICTIONARY_ID = "dictionary";
+  public static final String NULL_VALUE_VECTOR_ID = "nullvalue_vector";
+  public static final String BLOOM_FILTER_ID = "bloom_filter";
+  public static final String FST_ID = "fst_index";
+  public static final String INVERTED_ID = "inverted_index";
+  public static final String JSON_ID = "json_index";
+  public static final String RANGE_ID = "range_index";
+  public static final String TEXT_ID = "text_index";
+  public static final String H3_ID = "h3_index";
+
   private StandardIndexes() {
   }
 
-  // Other methods like bloomFilter() should be created for each index.
-  // This class may be changed in the future by adding a way to override index implementations in needed, like
-  // current IndexOverrides
+  public static IndexType<?, ?, ?> forward() {
+    return IndexService.getInstance().get(FORWARD_ID);
+  }
+
+  public static IndexType<?, ?, ?> dictionary() {
+    return IndexService.getInstance().get(DICTIONARY_ID);
+  }
+
+  public static IndexType<?, ?, ?> nullValueVector() {
+    return IndexService.getInstance().get(NULL_VALUE_VECTOR_ID);
+  }
 
   public static IndexType<BloomFilterConfig, BloomFilterReader, IndexCreator> bloomFilter() {
     return (IndexType<BloomFilterConfig, BloomFilterReader, IndexCreator>)
-        IndexService.getInstance().get("bloom_filter");
+        IndexService.getInstance().get(BLOOM_FILTER_ID);
+  }
+
+  public static IndexType<?, ?, ?> fst() {
+    return IndexService.getInstance().get(FST_ID);
+  }
+
+  public static IndexType<?, ?, ?> inverted() {
+    return IndexService.getInstance().get(INVERTED_ID);
+  }
+
+  public static IndexType<?, ?, ?> json() {
+    return IndexService.getInstance().get(JSON_ID);
+  }
+
+  public static IndexType<?, ?, ?> range() {
+    return IndexService.getInstance().get(RANGE_ID);
+  }
+
+  public static IndexType<?, ?, ?> text() {
+    return IndexService.getInstance().get(TEXT_ID);
+  }
+
+  public static IndexType<?, ?, ?> h3() {
+    return IndexService.getInstance().get(H3_ID);
   }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org