opensearchvectorindex

package
v0.1.314 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 22, 2026 License: Apache-2.0 Imports: 9 Imported by: 0

README

Amazon OpenSearch Vector Index Construct Library

---

All classes are under active development and subject to non-backward compatible changes or removal in any future version. These are not subject to the Semantic Versioning model. This means that while you may use them, you may need to update your source code when upgrading to a newer version of this package.


Language Package
Typescript Logo TypeScript @cdklabs/generative-ai-cdk-constructs
Python Logo Python cdklabs.generative_ai_cdk_constructs
Java Logo Java io.github.cdklabs.generative_ai_cdk_constructs
.Net .Net CdkLabs.GenerativeAICdkConstructs
Go Go github.com/cdklabs/generative-ai-cdk-constructs-go/generative-ai-cdk-constructs

This construct library provides a resource that creates a vector index on an Amazon OpenSearch Domain. It currently only supports Amazon OpenSearch Serverless.

Table of contents

API

See the API documentation.

Vector Index

The VectorIndex resource connects to OpenSearch and creates an index suitable for use with Amazon Bedrock Knowledge Bases.

vectorStore := opensearchserverless.NewVectorCollection(this, jsii.String("VectorCollection"))

opensearch_vectorindex.NewVectorIndex(this, jsii.String("VectorIndex"), &VectorIndexProps{
	Collection: vectorStore,
	IndexName: jsii.String("bedrock-knowledge-base-default-index"),
	VectorField: jsii.String("bedrock-knowledge-base-default-vector"),
	VectorDimensions: jsii.Number(1536),
	Precision: jsii.String("float"),
	DistanceType: jsii.String("l2"),
	Mappings: []MetadataManagementFieldProps{
		&MetadataManagementFieldProps{
			MappingField: jsii.String("AMAZON_BEDROCK_TEXT_CHUNK"),
			DataType: jsii.String("text"),
			Filterable: jsii.Boolean(true),
		},
		&MetadataManagementFieldProps{
			MappingField: jsii.String("AMAZON_BEDROCK_METADATA"),
			DataType: jsii.String("text"),
			Filterable: jsii.Boolean(false),
		},
	},
	Analyzer: &Analyzer{
		CharacterFilters: []iCU_NORMALIZER{
			opensearchserverless.CharacterFilterType_*iCU_NORMALIZER,
		},
		Tokenizer: opensearchserverless.TokenizerType_KUROMOJI_TOKENIZER,
		TokenFilters: []TokenFilterType{
			opensearchserverless.TokenFilterType_KUROMOJI_BASEFORM,
			opensearchserverless.TokenFilterType_JA_STOP,
		},
	},
})

Default values

Behind the scenes, the custom resource creates a k-NN vector in the OpenSearch index, allowing to perform different kinds of k-NN search. The knn_vector field is highly configurable and can serve many different k-NN workloads. It is created as follows:

Python

"properties": {
            vector_field: {
                "type": "knn_vector",
                "dimension": dimensions,
                "data_type": precision,
                "method": {
                    "engine": "faiss",
                    "space_type": distance_type,
                    "name": "hnsw",
                    "parameters": {},
                },
            },
            "id": {
                "type": "text",
                "fields": {"keyword": {"type": "keyword", "ignore_above": 256}},
            },
        },

Users can currently configure the vector_field, dimension, data_type, and distance_type fields through the construct interface.

For details on the different settings, you can refer to the Knn plugin documentation.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewVectorIndex_Override

func NewVectorIndex_Override(v VectorIndex, scope constructs.Construct, id *string, props *VectorIndexProps)

Experimental.

func VectorIndex_IsConstruct

func VectorIndex_IsConstruct(x interface{}) *bool

Checks if `x` is a construct.

Use this method instead of `instanceof` to properly detect `Construct` instances, even when the construct library is symlinked.

Explanation: in JavaScript, multiple copies of the `constructs` library on disk are seen as independent, completely different libraries. As a consequence, the class `Construct` in each copy of the `constructs` library is seen as a different class, and an instance of one class will not test as `instanceof` the other class. `npm install` will not create installations like this, but users may manually symlink construct libraries together or use a monorepo tool: in those cases, multiple copies of the `constructs` library can be accidentally installed, and `instanceof` will behave unpredictably. It is safest to avoid using `instanceof`, and using this type-testing method instead.

Returns: true if `x` is an object created from a class which extends `Construct`. Experimental.

func VectorIndex_IsOwnedResource

func VectorIndex_IsOwnedResource(construct constructs.IConstruct) *bool

Returns true if the construct was created by CDK, and false otherwise. Experimental.

func VectorIndex_IsResource

func VectorIndex_IsResource(construct constructs.IConstruct) *bool

Check whether the given construct is a Resource. Experimental.

Types

type Analyzer

type Analyzer struct {
	// The analyzers to use.
	// Experimental.
	CharacterFilters *[]opensearchserverless.CharacterFilterType `field:"required" json:"characterFilters" yaml:"characterFilters"`
	// The token filters to use.
	// Experimental.
	TokenFilters *[]opensearchserverless.TokenFilterType `field:"required" json:"tokenFilters" yaml:"tokenFilters"`
	// The tokenizer to use.
	// Experimental.
	Tokenizer opensearchserverless.TokenizerType `field:"required" json:"tokenizer" yaml:"tokenizer"`
}

Properties for the Analyzer. Experimental.

type MetadataManagementFieldProps

type MetadataManagementFieldProps struct {
	// The data type of the field.
	// Experimental.
	DataType *string `field:"required" json:"dataType" yaml:"dataType"`
	// Whether the field is filterable.
	// Experimental.
	Filterable *bool `field:"required" json:"filterable" yaml:"filterable"`
	// The name of the field.
	// Experimental.
	MappingField *string `field:"required" json:"mappingField" yaml:"mappingField"`
}

Metadata field definitions. Experimental.

type VectorIndex

type VectorIndex interface {
	awscdk.Resource
	// The environment this resource belongs to.
	//
	// For resources that are created and managed in a Stack (those created by
	// creating new class instances like `new Role()`, `new Bucket()`, etc.), this
	// is always the same as the environment of the stack they belong to.
	//
	// For referenced resources (those obtained from referencing methods like
	// `Role.fromRoleArn()`, `Bucket.fromBucketName()`, etc.), they might be
	// different than the stack they were imported into.
	// Experimental.
	Env() *interfaces.ResourceEnvironment
	// The name of the index.
	// Experimental.
	IndexName() *string
	// The tree node.
	// Experimental.
	Node() constructs.Node
	// Returns a string-encoded token that resolves to the physical name that should be passed to the CloudFormation resource.
	//
	// This value will resolve to one of the following:
	// - a concrete value (e.g. `"my-awesome-bucket"`)
	// - `undefined`, when a name should be generated by CloudFormation
	// - a concrete name generated automatically during synthesis, in
	//   cross-environment scenarios.
	// Experimental.
	PhysicalName() *string
	// The stack in which this resource is defined.
	// Experimental.
	Stack() awscdk.Stack
	// The number of dimensions in the vector.
	// Experimental.
	VectorDimensions() *float64
	// The name of the vector field.
	// Experimental.
	VectorField() *string
	// Apply the given removal policy to this resource.
	//
	// The Removal Policy controls what happens to this resource when it stops
	// being managed by CloudFormation, either because you've removed it from the
	// CDK application or because you've made a change that requires the resource
	// to be replaced.
	//
	// The resource can be deleted (`RemovalPolicy.DESTROY`), or left in your AWS
	// account for data recovery and cleanup later (`RemovalPolicy.RETAIN`).
	// Experimental.
	ApplyRemovalPolicy(policy awscdk.RemovalPolicy)
	// Experimental.
	GeneratePhysicalName() *string
	// Returns an environment-sensitive token that should be used for the resource's "ARN" attribute (e.g. `bucket.bucketArn`).
	//
	// Normally, this token will resolve to `arnAttr`, but if the resource is
	// referenced across environments, `arnComponents` will be used to synthesize
	// a concrete ARN with the resource's physical name. Make sure to reference
	// `this.physicalName` in `arnComponents`.
	// Experimental.
	GetResourceArnAttribute(arnAttr *string, arnComponents *awscdk.ArnComponents) *string
	// Returns an environment-sensitive token that should be used for the resource's "name" attribute (e.g. `bucket.bucketName`).
	//
	// Normally, this token will resolve to `nameAttr`, but if the resource is
	// referenced across environments, it will be resolved to `this.physicalName`,
	// which will be a concrete name.
	// Experimental.
	GetResourceNameAttribute(nameAttr *string) *string
	// Returns a string representation of this construct.
	// Experimental.
	ToString() *string
}

Deploy a vector index on the collection. Experimental.

func NewVectorIndex

func NewVectorIndex(scope constructs.Construct, id *string, props *VectorIndexProps) VectorIndex

Experimental.

type VectorIndexProps

type VectorIndexProps struct {
	// The OpenSearch Vector Collection.
	// Experimental.
	Collection opensearchserverless.VectorCollection `field:"required" json:"collection" yaml:"collection"`
	// Experimental.
	DistanceType *string `field:"required" json:"distanceType" yaml:"distanceType"`
	// The name of the index.
	// Experimental.
	IndexName *string `field:"required" json:"indexName" yaml:"indexName"`
	// The metadata management fields.
	// Experimental.
	Mappings *[]*MetadataManagementFieldProps `field:"required" json:"mappings" yaml:"mappings"`
	// Experimental.
	Precision *string `field:"required" json:"precision" yaml:"precision"`
	// The number of dimensions in the vector.
	// Experimental.
	VectorDimensions *float64 `field:"required" json:"vectorDimensions" yaml:"vectorDimensions"`
	// The name of the vector field.
	// Experimental.
	VectorField *string `field:"required" json:"vectorField" yaml:"vectorField"`
	// The analyzer to use.
	// Default: - No analyzer.
	//
	// Experimental.
	Analyzer *Analyzer `field:"optional" json:"analyzer" yaml:"analyzer"`
}

Properties for the VectorIndex. Experimental.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL