Insert

Inserting Data into Index

There are multiple ways to insert data into an index:

  • Plaintext vectors (with automatic index encryption)

  • Pre-encrypted vectors (CipherBlock)

  • Vectors with metadata

⚠️ Note: Since the index metric is inner product (IP), vectors must be normalized before insertion. Normalization ensures that similarity scores reflect cosine similarity rather than raw magnitude differences.


1. Inserting Plaintext (with Index Encryption)

You can insert plaintext vectors in bulk using list[list[float]], list[np.ndarray], or a 2D numpy.ndarray. If index_encryption is enabled in the index configuration, the vectors will be automatically encrypted before insertion. For detailed configuration, refer to Index Configuration.

Example

import numpy as np
import pyenvector as ev

ev.init(address="localhost:50050", key_path="keys", key_id="example")

index = ev.create_index("example_index", dim=512)

vecs = np.random.rand(100, 512)
# vecs = [[0.001, 0.02, ..., 0.127]] # List[List[float]]
# vecs = [np.random.rand(512)] * 100 # List[np.ndarray]

# Normalize vectors before insertion (required for inner product metric)
vecs = vecs / np.linalg.norm(vecs, axis=1, keepdims=True)

index.insert(vecs)
# Output: 
# Index(
#    IndexConfig(
#        index_name="example_index",
#        dim=512,
#        key_path='keys',
#        key_id='example',
#    ),
#  num_entities=100,
#  cipher=<pyenvector.crypto.cipher.Cipher object at 0x7f1776199d60>
#)
        


3. Inserting with Metadata

You can insert vectors together with metadata. Metadata should be provided as a list of strings. If metadata_encryption=True is enabled in the index configuration, the metadata will be encrypted before being stored.

Example

import numpy as np
import pyenvector as ev

ev.init(address="localhost:50050", key_path="keys", key_id="example")

index = ev.create_index("example_index", dim=512)

vecs = np.random.rand(100, 512)
# Normalize vectors for inner product metric
vecs = vecs / np.linalg.norm(vecs, axis=1, keepdims=True)

metadatas = [f"metadata_{i}" for i in range(100)]

index.insert(vecs, metadata=metadatas)
# Output: 
# Index(
#    IndexConfig(
#        index_name="example_index",
#        dim=512,
#        key_path='keys',
#        key_id='example',
#    ),
#  num_entities=100,
#  cipher=<pyenvector.crypto.cipher.Cipher object at 0x7f1776199d60>
#)

Last updated