This guide explains how to create an encrypted index using the enVector Python SDK. The index creation process involves configuring encryption parameters and creating the index with specified settings.
Detailed Usage Using Arguments
🧩 Index Configuration Details
Index creation relies on an index configuration that the SDK keeps in memory. You can set it once via ev.init_index_config(...) and/or override key parts when calling create_index(...).
Note: mm is an advanced mode and currently does not support encrypted queries (query_encryption="cipher"). Use rmp for end‑to‑end encrypted search.
Recommended setup pattern:
import pyenvector as ev# 1) Connect firstev.init_connect(address="your.hostname:50050")# 2) Initialize index configuration (can be called once per session)ev.init_index_config( key_path="keys", key_id="my-key", auto_key_setup=True, # auto-generate & register if missing metadata_encryption=True, # encrypt metadata at rest/in transit seal_mode="none", # or "aes" with seal_kek_path# seal_kek_path="./aes.kek", # use a 32-byte file# Search/crypto presets preset="ip", # optimized for inner product index_type="flat", # exhaustive search query_encryption="cipher"# end-to-end encrypted search)# 3) Create the index (you should pass name + dimension explicitly)index = ev.create_index(index_name="products", dim=768)
🚀 Presets and modes: user-guide/initialize/index-configuration/3.-presets.md
1. Basic Index Creation
To create an index, you must first initialize pyenvector. For custom settings, please refer to Index Configuration.
Important Notes: The maximum value for vector dimension is 4096
2. Complete Working Example
3. Error Handling
4. Verification
After creating an index, you can verify it was created successfully:
5. Best Practices
Dimension Selection: Choose dimensions based on your vector model requirements (maximum: 4096)
Encryption Strategy:
Query encryption: Choose based on your use case:
"plain": When query vectors can be sent in cleartext
"cipher": When query privacy is required (e.g., sensitive user queries)
Error Handling: Implement proper error handling for production deployments
Resource Cleanup: Ensure proper cleanup of resources after operations
This completes the guide for creating encrypted indexes with the enVector Python SDK. The process ensures secure, encrypted storage of your vector data while maintaining search functionality.
Note: This guide assumes you have already configured enVector server and registered your encryption keys. For connection and key registration details, please refer to the respective documentation sections.
# Initialize the SDK
import pyenvector as ev
HOST_ADDRESS = "your.hostname:50050"
ev.init(address=HOST_ADDRESS, key_path="./keys", key_id="key_id")
# Create the index
index = ev.create_index(index_name="my_index", dim=128)
import pyenvector as ev
import os
import numpy as np
from pyenvector.crypto import KeyGenerator
from pyenvector.index import IndexConfig, Index
HOST_ADDRESS = "your.hostname:50050"
def create_encrypted_index(key_path, key_id, index_name, dim):
# Init Connection and Index Configuration
ev.init_connect(address=HOST_ADDRESS)
ev.init_index_config(
key_path=key_path,
key_id=key_id,
)
# Create index
try:
index = ev.create_index(index_name=index_name, dim=dim)
print(f"Index '{index_config.index_name}' created successfully")
return index
except Exception as e:
print(f"Failed to create index: {e}")
return None
# Usage example
# index = create_encrypted_index()
try:
index = ev.create_index(index_name="my_index", dim=128)
except ValueError as e:
if "Indexer not connected" in str(e):
print("Please ensure the server is running and accessible")
elif "Key ID not found" in str(e):
print("Please register the key with the server first")
elif "Key path mismatch" in str(e):
print("Please reinitialize the SDK with ev.init()")
else:
print(f"Configuration error: {e}")
except Exception as e:
print(f"Unexpected error: {e}")
# The index object is returned upon successful creation
if index is not None:
print("Index created successfully!")
print(f"Index name: {index.index_name}")
print(f"Index dimension: {index.dim}")
# Print full index information
print("\nFull index details:")
print(index)
else:
print("Index creation failed")