Files
documentdb/pg_helio_api/include/vector/vector_common.h
T
Zinan Ren 🐾 068a3364ed Merged PR 1400987: [Vector Search][DiskANN Part 1 - Refactoring] To support different index types in oss helio and pgmongo
### Does this PR have any customer impact?
Yes

### Type (Feature, Refactoring, Bugfix, DevOps, Testing, Perf, etc)
Refactoring

### Does it involve schema level changes? (Table, Column, Index, UDF, etc level changes)
No

### Are you introducing any new config? If yes, do you have tests with and without them being set?
Yes
pgmongo.enableVectorDiskANNIndex: default is off

### Release Note (Refer [Template](../docs/release_notes/pgmongo_template.md))

### Description
Refactoring vector search to support different index types in oss helio and pgmongo
### 1. Index type
- helio: vector-ivf, vector-hnsw
- pgmongo: vector-ivf, vector-hnsw, vector-diskann

### 2. Vector index creation
- ParseIndexCreationSpecFunc
- ValidateIndexCreationSpecFunc
- GenerateIndexCreationCmdFunc

### 3. Vector search
- ParseIndexSearchSpecFunc
- ValidateIndexSearchSpecFunc

### 4. Planner and custom scan
- GetIndexAccessMethodOidFunc
- GetSimilarityOpOidByFamilyOidFunc
- SetSearchParametersToGUCFunc
- GetDefaultSearchParamBsonFunc
- CalculateSearchParamBsonFunc

### 5. Test cases
- bson_aggregation_pipeline_tests_vector_diskann
- bson_aggregation_pipeline_tests_vector_hnsw
- bson_aggregation_pipeline_tests_vector_ivf
- bson_aggregation_pipeline_tests_vector_mongo
2024-08-16 18:24:51 +03:00

70 lines
2.0 KiB
C

/*-------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
*
* include/vector/vector_common.h
*
* Common definitions for vector indexes.
*
*-------------------------------------------------------------------------
*/
#ifndef VECTOR_COMMON__H
#define VECTOR_COMMON__H
#define VECTOR_MAX_DIMENSIONS 2000
/* ivfflat parameters */
#define IVFFLAT_DEFAULT_NPROBES 1
#define IVFFLAT_MIN_NPROBES 1
#define IVFFLAT_MAX_NPROBES 32768
#define IVFFLAT_DEFAULT_LISTS 100
#define IVFFLAT_MIN_LISTS 1
#define IVFFLAT_MAX_LISTS 32768
#define VECTOR_PARAMETER_NAME_IVF_NPROBES "nProbes"
#define VECTOR_PARAMETER_NAME_IVF_NPROBES_STR_LEN 7
#define VECTOR_PARAMETER_NAME_IVF_NLISTS "numLists"
/* hnsw parameters */
#define HNSW_DEFAULT_M 16
#define HNSW_MIN_M 2
#define HNSW_MAX_M 100
#define HNSW_DEFAULT_EF_CONSTRUCTION 64
#define HNSW_MIN_EF_CONSTRUCTION 4
#define HNSW_MAX_EF_CONSTRUCTION 1000
#define HNSW_DEFAULT_EF_SEARCH 40
#define HNSW_MIN_EF_SEARCH 1
#define HNSW_MAX_EF_SEARCH 1000
#define VECTOR_PARAMETER_NAME_HNSW_M "m"
#define VECTOR_PARAMETER_NAME_HNSW_EF_CONSTRUCTION "efConstruction"
#define VECTOR_PARAMETER_NAME_HNSW_EF_SEARCH "efSearch"
#define VECTOR_PARAMETER_NAME_HNSW_EF_SEARCH_STR_LEN 8
/* dynamic calculation of nprobes or efSearch depending on collection size */
#define VECTOR_SEARCH_SMALL_COLLECTION_ROWS 10000
#define VECTOR_SEARCH_1M_COLLECTION_ROWS 1000000
/* metadata field names */
#define VECTOR_METADATA_FIELD_NAME "__cosmos_meta__"
#define VECTOR_METADATA_FIELD_NAME_STR_LEN 15
#define VECTOR_METADATA_SCORE_FIELD_NAME "score"
#define VECTOR_METADATA_SCORE_FIELD_NAME_STR_LEN 5
/*
* helioapi.enableVectorHNSWIndex GUC determines vector indexes
* and queries are enabled in pg_helio_api or not.
*/
extern bool EnableVectorHNSWIndex;
/*
* GUC to enable vector pre-filtering feature for vector search.
* This is disabled by default.
*/
extern bool EnableVectorPreFilter;
#endif