milvus-logo
LFAI
Home
  • Get Started
    • Install Milvus

Run Milvus Lite Locally

This page illustrates how to run Milvus locally with Milvus Lite. Milvus Lite is the lightweight version of Milvus, an open-source vector database that powers AI applications with vector embeddings and similarity search.

Overview

Milvus Lite can be imported into your Python application, providing the core vector search functionality of Milvus. Milvus Lite is already included in the Python SDK of Milvus. It can be simply deployed with pip install pymilvus.

With Milvus Lite, you can start building an AI application with vector similarity search within minutes! Milvus Lite is good for running in the following environment:

  • Jupyter Notebook / Google Colab
  • Laptops
  • Edge Devices

Milvus Lite shares the same API with Milvus Standalone and Distributed, and covers most of the features such as vector data persistence and management, vector CRUD operations, sparse and dense vector search, metadata filtering, multi-vector and hybrid_search. Together, they provide a consistent experience across different types of environments, from edge devices to clusters in cloud, fitting use cases of different size. With the same client-side code, you can run GenAI apps with Milvus Lite on a laptop or Jupyter Notebook, or Milvus Standalone on Docker container, or Milvus Distributed on massive scale Kubernetes cluster serving billions of vectors in production.

Prerequisites

Milvus Lite currently supports the following environmnets:

  • Ubuntu >= 20.04 (x86_64 and arm64)
  • MacOS >= 11.0 (Apple Silicon M1/M2 and x86_64)

Please note that Milvus Lite is only suitable for small scale vector search use cases. For a large scale use case, we recommend using Milvus Standalone or Milvus Distributed. You can also consider the fully-managed Milvus on Zilliz Cloud.

Set up Milvus Lite

pip install -U pymilvus

We recommend using pymilvus. Since milvus-lite is included in pymilvus version 2.4.2 or above, you can pip install with -U to force update to the latest version and milvus-lite is automatically installed.

If you want to explicitly install milvus-lite package, or you have installed an older version of milvus-lite and would like to update it, you can do pip install -U milvus-lite.

Connect to Milvus Lite

In pymilvus, specify a local file name as uri parameter of MilvusClient will use Milvus Lite.

from pymilvus import MilvusClient
client = MilvusClient("./milvus_demo.db")

After running the above code snippet, a database file named milvus_demo.db will be generated in the current folder.

NOTE: Note that the same API also applies to Milvus Standalone, Milvus Distributed and Zilliz Cloud, the only difference is to replace local file name to remote server endpoint and credentials, e.g. client = MilvusClient(uri="http://localhost:19530", token="username:password").

Examples

Following is a simple demo showing how to use Milvus Lite for text search. There are more comprehensive examples for using Milvus Lite to build applications such as RAG, image search, and using Milvus Lite in popular RAG framework such as LangChain and LlamaIndex!

from pymilvus import MilvusClient
import numpy as np

client = MilvusClient("./milvus_demo.db")
client.create_collection(
    collection_name="demo_collection",
    dimension=384  # The vectors we will use in this demo has 384 dimensions
)

# Text strings to search from.
docs = [
    "Artificial intelligence was founded as an academic discipline in 1956.",
    "Alan Turing was the first person to conduct substantial research in AI.",
    "Born in Maida Vale, London, Turing was raised in southern England.",
]
# For illustration, here we use fake vectors with random numbers (384 dimension).

vectors = [[ np.random.uniform(-1, 1) for _ in range(384) ] for _ in range(len(docs)) ]
data = [ {"id": i, "vector": vectors[i], "text": docs[i], "subject": "history"} for i in range(len(vectors)) ]
res = client.insert(
    collection_name="demo_collection",
    data=data
)

# This will exclude any text in "history" subject despite close to the query vector.
res = client.search(
    collection_name="demo_collection",
    data=[vectors[0]],
    filter="subject == 'history'",
    limit=2,
    output_fields=["text", "subject"],
)
print(res)

# a query that retrieves all entities matching filter expressions.
res = client.query(
    collection_name="demo_collection",
    filter="subject == 'history'",
    output_fields=["text", "subject"],
)
print(res)

# delete
res = client.delete(
    collection_name="demo_collection",
    filter="subject == 'history'",
)
print(res)

Limits

When running Milvus Lite, note that some features are not supported. The following tables summarize the usage limits on Milvus Lite.

Collection

Method / ParameterSupported in Milvus Lite
create_collection()Support with limited parameters
collection_nameY
dimensionY
primary_field_nameY
id_typeY
vector_field_nameY
metric_typeY
auto_idY
schemaY
index_paramsY
enable_dynamic_fieldY
num_shardsN
partition_key_fieldN
num_partitionsN
consistency_levelN (Only supports Strong; Any configuration will be treated as Strong.)
get_collection_stats()Supports getting collection statistics.
collection_nameY
timeoutY
describe_collection()num_shards, consistency_level, and collection_id in response are invalid.
timeoutY
has_collection()Supports checking if a collection exists.
collection_nameY
timeoutY
list_collections()Supports listing all collections.
drop_collection()Supports dropping a collection.
collection_nameY
timeoutY
rename_collection()Renaming a collection is not supported.

Field & Schema

Method / ParameterSupported in Milvus Lite
create_schema()Support with limited parameters
auto_idY
enable_dynamic_fieldY
primary_fieldY
partition_key_fieldN
add_field()Support with limited parameters
field_nameY
datatypeY
is_primaryY
max_lengthY
element_typeY
max_capacityY
dimY
is_partition_keyN
Method / ParameterSupported in Milvus Lite
search()Support with limited parameters
collection_nameY
dataY
filterY
limitY
output_fieldsY
search_paramsY
timeoutY
partition_namesN
anns_fieldY
query()Support with limited parameters
collection_nameY
filterY
output_fieldsY
timeoutY
idsY
partition_namesN
get()Support with limited parameters
collection_nameY
idsY
output_fieldsY
timeoutY
partition_namesN
delete()Support with limited parameters
collection_nameY
idsY
timeoutY
filterY
partition_nameN
insert()Support with limited parameters
collection_nameY
dataY
timeoutY
partition_nameN
upsert()Support with limited parameters
collection_nameY
dataY
timeoutY
partition_nameN

Load & Release

Method / ParameterSupported in Milvus Lite
load_collection()Y
collection_nameY
timeoutY
release_collection()Y
collection_nameY
timeoutY
get_load_state()Getting load status is not supported.
refresh_load()Loading the unloaded data of a loaded collection is not supported.
close()Y

Index

Method / ParameterSupported in Milvus Lite
list_indexes()Listing indexes is supported.
collection_nameY
field_nameY
create_index()Only supports FLAT index type.
index_paramsY
timeoutY
drop_index()Dropping indexes is supported.
collection_nameY
index_nameY
timeoutY
describe_index()Describing indexes is supported.
collection_nameY
index_nameY
timeoutY

Vector Index Types

Milvus Lite only supports FLAT index type. It uses FLAT type regardless of the specified index type in collection.

Search Features

Milvus Lite supports Sparse Vector, Multi-vector, Hybrid Search.

Partition

Milvus Lite does not support partitions and partition-related methods.

Users & Roles

Milvus Lite does not support users and roles and related methods.

Alias

Milvus Lite does not support aliases and alias-related methods.

Migrating data from Milvus Lite

All data stored in Milvus Lite can be easily exported and loaded into other types of Milvus deployment, such as Milvus Standalone on Docker, Milvus Distributed on K8s, or fully-managed Milvus on Zilliz Cloud.

Milvus Lite provides a command line tool that can dump data into a json file, which can be imported into milvus and Zilliz Cloud(the fully managed cloud service for Milvus). The milvus-lite command will be installed together with milvus-lite python package

# Install
pip install -U "pymilvus[bulk_writer]"

milvus-lite dump -h

usage: milvus-lite dump [-h] [-d DB_FILE] [-c COLLECTION] [-p PATH]

optional arguments:
  -h, --help            show this help message and exit
  -d DB_FILE, --db-file DB_FILE
                        milvus lite db file
  -c COLLECTION, --collection COLLECTION
                        collection that need to be dumped
  -p PATH, --path PATH  dump file storage dir

The following example dumps all data from demo_collection collection that’s stored in ./milvus_demo.db (Milvus Lite database file)

To export data:

milvus-lite dump -d ./milvus_demo.db -c demo_collection -p ./data_dir
# ./milvus_demo.db: milvus lite db file
# demo_collection: collection that need to be dumped
#./data_dir : dump file storage dir

With the dump file, you can upload data to Zilliz Cloud via Data Import, or upload data to Milvus servers via Bulk Insert.

What’s next

Having connected to Milvus Lite, you can: