Skip to Content
Concepts

Concepts

Understanding the core concepts of Endee Vector Database.

Indexes

Indexes are the vector stores where your data lives. Endee supports two types of indexes:

  • Dense Indexes: For semantic similarity search using vector embeddings
  • Hybrid Indexes: Combine dense vectors with sparse vector search

Both index types are optimized for fast Approximate Nearest Neighbor (ANN) searches using the HNSW algorithm.

Dense Indexes

Dense indexes enable semantic search — finding items based on meaning rather than exact keyword matches. Use dense indexes when you want to:

  • Find semantically similar documents
  • Power recommendation systems
  • Enable image/video similarity search

Hybrid Indexes

Hybrid indexes combine dense vector search with sparse vector search. To create a hybrid index, specify the sparse_dim parameter:

client.create_index( name="my_hybrid_index", dimension=384, # Dense vector dimension sparse_dim=30000, # Sparse vector dimension space_type="cosine" )

Use hybrid indexes for document retrieval in RAG pipelines where you need both semantic and keyword matching.

Index Parameters

ParameterDescriptionDefault
nameUnique name for your indexRequired
dimensionDense vector dimensionality (max 10000)Required
space_typeDistance metric: "cosine", "l2", or "ip"Required
sparse_dimSparse vector dimension (enables hybrid search)None
MHNSW graph connectivity16
ef_conHNSW construction parameter128
precisionVector quantization precisionINT8D

Precision Options

The precision parameter controls how vectors are stored:

PrecisionDescriptionStorageSpeedAccuracy
BINARY1-bit quantizationSmallestFastestLower
INT8D8-bit integer (default)SmallFastGood
INT16D16-bit integerMediumMediumHigher
FLOAT1616-bit floatMediumMediumHigh
FLOAT3232-bit floatLargestSlowerHighest

Query Parameters

Dense Query

ParameterDescriptionDefault
vectorQuery vector (must match index dimension)Required
top_kNumber of results to return (max 512)10
efSearch quality parameter (max 1024)128
include_vectorsInclude vector data in results (dense only)False
filterFilter criteria (array of filter objects)None

Hybrid Query

For hybrid indexes, include sparse query components:

ParameterDescriptionDefault
sparse_indicesNon-zero term positions in sparse queryRequired (hybrid)
sparse_valuesWeights for sparse query termsRequired (hybrid)

Result Fields

FieldDescription
idVector identifier
similaritySimilarity score
distanceDistance score (1.0 - similarity)
metaMetadata dictionary
normVector norm
vectorDense Vector data (if include_vectors=True)

Vectors

Vectors are the fundamental data units stored in an index.

Dense Vector Fields

FieldRequiredDescription
idYesUnique identifier
vectorYesDense embedding array
metaNoArbitrary metadata object
filterNoKey-value pairs for filtering

Hybrid Vector Fields

For hybrid indexes, include sparse vector components:

FieldRequiredDescription
sparse_indicesYesNon-zero term positions in sparse vector
sparse_valuesYesWeights for each sparse index

sparse_indices and sparse_values must have the same length. Values in sparse_indices must be within [0, sparse_dim).

Note: Maximum batch size is 1000 vectors per upsert call.

Filtering

Use the filter parameter to restrict search results based on conditions.

Operators

OperatorDescriptionExample
$eqExact match{"status": {"$eq": "published"}}
$inMatch any in list{"tags": {"$in": ["ai", "ml"]}}
$rangeNumeric range (inclusive){"score": {"$range": [70, 95]}}

Notes:

  • Operators are case-sensitive and must be prefixed with $
  • All filters are combined with logical AND
  • $range supports values within [0 – 999]

Authentication

By default, Endee runs without authentication for easy local development. To secure your instance, set the NDD_AUTH_TOKEN environment variable when starting the server.

Enabling Authentication

In your docker-compose.yml:

environment: NDD_AUTH_TOKEN: "your-secret-token"

Using Authentication

When authentication is enabled, you must provide the same token in two places:

1. Dashboard Access

Enter the token in the dashboard login to access the web interface at http://localhost:8080.

2. Python SDK

Pass the token when initializing the client:

from endee import Endee # With authentication client = Endee("your-secret-token")

3. REST API

Include the token in the Authorization header:

curl -X GET http://localhost:8080/api/v1/index/list \ -H "Authorization: Bearer your-secret-token"

Important: All API requests will fail if the token doesn’t match the server’s NDD_AUTH_TOKEN. Keep your token secure and never expose it in client-side code.