Skip to content

Commit c816df3

Browse files
feat(oss-opensearch): Add KNN derived source configuration option
1 parent f1c7ad3 commit c816df3

4 files changed

Lines changed: 26 additions & 0 deletions

File tree

vectordb_bench/backend/clients/oss_opensearch/config.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ class OSSOpenSearchIndexConfig(BaseModel, DBCaseConfig):
7777
oversample_factor: float = 1.0
7878
quantization_type: OSSOpenSearchQuantization = OSSOpenSearchQuantization.fp32
7979
replication_type: str | None = "DOCUMENT"
80+
knn_derived_source_enabled: str | None = None
8081

8182
@root_validator
8283
def validate_engine_name(cls, values: dict):
@@ -103,6 +104,7 @@ def __eq__(self, obj: any):
103104
and self.use_routing == obj.use_routing
104105
and self.quantization_type == obj.quantization_type
105106
and self.replication_type == obj.replication_type
107+
and self.knn_derived_source_enabled == obj.knn_derived_source_enabled
106108
)
107109

108110
def __hash__(self) -> int:
@@ -117,6 +119,7 @@ def __hash__(self) -> int:
117119
self.use_routing,
118120
self.quantization_type,
119121
self.replication_type,
122+
self.knn_derived_source_enabled,
120123
)
121124
)
122125

vectordb_bench/backend/clients/oss_opensearch/oss_opensearch.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,7 @@ def _create_index(self, client: OpenSearch) -> None:
270270
log.info(f"Creating index with ef_search: {ef_search_value}")
271271
log.info(f"Creating index with number_of_replicas: {self.case_config.number_of_replicas}")
272272
log.info(f"Creating index with replication_type: {self.case_config.replication_type}")
273+
log.info(f"Creating index with knn_derived_source_enabled: {self.case_config.knn_derived_source_enabled}")
273274
log.info(f"Creating index with engine: {self.case_config.engine}")
274275
log.info(f"Creating index with metric type: {self.case_config.metric_type_name}")
275276
log.info(f"All case_config parameters: {self.case_config.__dict__}")
@@ -293,6 +294,12 @@ def _create_index(self, client: OpenSearch) -> None:
293294
},
294295
"refresh_interval": self.case_config.refresh_interval,
295296
}
297+
# Only add knn.derived_source.enabled if explicitly set (None = skip for versions < 3.x compatibility)
298+
if self.case_config.knn_derived_source_enabled and self.case_config.knn_derived_source_enabled != "None":
299+
is_knn_derived_source_enabled = self.case_config.knn_derived_source_enabled == "True"
300+
log.info(f"Adding knn.derived_source.enabled={is_knn_derived_source_enabled} to index settings")
301+
settings["index"]["knn.derived_source.enabled"] = is_knn_derived_source_enabled
302+
296303
settings["index"]["knn.algo_param.ef_search"] = ef_search_value
297304

298305
version_specific_settings = self._get_version_specific_settings(self._get_cluster_version(client))

vectordb_bench/frontend/config/dbCaseConfigs.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1802,6 +1802,17 @@ class CaseConfigInput(BaseModel):
18021802
},
18031803
)
18041804

1805+
CaseConfigParamInput_KNN_DERIVED_SOURCE_ENABLED_AWSOpensearch = CaseConfigInput(
1806+
label=CaseConfigParamType.knn_derived_source_enabled,
1807+
displayLabel="KNN Derived Source Enabled",
1808+
inputHelp="OpenSearch 3.x+ set this to 'True' by default. Use 'False' to disable it. Use 'None' for <3.x versions.",
1809+
inputType=InputType.Option,
1810+
inputConfig={
1811+
"options": ["None", "True", "False"],
1812+
"default": "None",
1813+
},
1814+
)
1815+
18051816
MilvusLoadConfig = [
18061817
CaseConfigParamInput_IndexType,
18071818
CaseConfigParamInput_M,
@@ -1883,12 +1894,14 @@ class CaseConfigInput(BaseModel):
18831894
CaseConfigParamInput_EFConstruction_AWSOpensearch,
18841895
CaseConfigParamInput_M_AWSOpensearch,
18851896
CaseConfigParamInput_REPLICATION_TYPE_AWSOpensearch,
1897+
CaseConfigParamInput_KNN_DERIVED_SOURCE_ENABLED_AWSOpensearch,
18861898
]
18871899
AWSOpenSearchPerformanceConfig = [
18881900
CaseConfigParamInput_EFConstruction_AWSOpensearch,
18891901
CaseConfigParamInput_M_AWSOpensearch,
18901902
CaseConfigParamInput_EF_SEARCH_AWSOpensearch,
18911903
CaseConfigParamInput_REPLICATION_TYPE_AWSOpensearch,
1904+
CaseConfigParamInput_KNN_DERIVED_SOURCE_ENABLED_AWSOpensearch,
18921905
]
18931906

18941907
AliyunOpensearchLoadingConfig = []
@@ -2215,6 +2228,7 @@ class CaseConfigInput(BaseModel):
22152228
CaseConfigParamInput_EFConstruction_AWSOpensearch,
22162229
CaseConfigParamInput_NUMBER_OF_SHARDS_AWSOpensearch,
22172230
CaseConfigParamInput_NUMBER_OF_REPLICAS_AWSOpensearch,
2231+
CaseConfigParamInput_KNN_DERIVED_SOURCE_ENABLED_AWSOpensearch,
22182232
CaseConfigParamInput_NUMBER_OF_INDEXING_CLIENTS_AWSOpensearch,
22192233
CaseConfigParamInput_INDEX_THREAD_QTY_AWSOpensearch,
22202234
CaseConfigParamInput_REPLICATION_TYPE_AWSOpensearch,
@@ -2230,6 +2244,7 @@ class CaseConfigInput(BaseModel):
22302244
CaseConfigParamInput_EFConstruction_AWSOpensearch,
22312245
CaseConfigParamInput_NUMBER_OF_SHARDS_AWSOpensearch,
22322246
CaseConfigParamInput_NUMBER_OF_REPLICAS_AWSOpensearch,
2247+
CaseConfigParamInput_KNN_DERIVED_SOURCE_ENABLED_AWSOpensearch,
22332248
CaseConfigParamInput_NUMBER_OF_INDEXING_CLIENTS_AWSOpensearch,
22342249
CaseConfigParamInput_INDEX_THREAD_QTY_AWSOpensearch,
22352250
CaseConfigParamInput_REPLICATION_TYPE_AWSOpensearch,

vectordb_bench/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ class CaseConfigParamType(Enum):
128128
use_routing = "use_routing"
129129
replication_type = "replication_type"
130130
cache_size = "cache_size"
131+
knn_derived_source_enabled = "knn_derived_source_enabled"
131132

132133
dataset_with_size_type = "dataset_with_size_type"
133134
filter_rate = "filter_rate"

0 commit comments

Comments
 (0)