This document provides a detailed reference for the key classes and methods in the Qdrant Multi-Node Cluster project. Understanding these APIs will help you interact with the Qdrant cluster and build your own vector search applications.
The QdrantClusterDemo class is the primary interface for interacting with the Qdrant cluster. It provides methods for collection management, data insertion, and vector search operations.
from qdrant_demo.core.cluster_demo import QdrantClusterDemo
demo = QdrantClusterDemo(host="localhost", port=6333)def __init__(self, host: str = settings.QDRANT_HOST, port: int = settings.QDRANT_PORT)Parameters:
host(str): Hostname or IP address of the Qdrant serverport(int): Port number of the Qdrant server
Returns:
- An instance of the
QdrantClusterDemoclass
def run_demo(self) -> NoneRuns the complete demonstration, including setting up a collection, inserting data, demonstrating vector search, and displaying collection statistics.
Parameters: None
Returns: None
def setup_collection(self) -> NoneSets up a collection with advanced configuration, including sharding and replication.
Parameters: None
Returns: None
Example:
demo = QdrantClusterDemo()
demo.setup_collection()def insert_data(self, count: int = settings.DEFAULT_POINT_COUNT) -> NoneInserts a specified number of random vectors with payload data.
Parameters:
count(int): Number of vector points to insert
Returns: None
Example:
# Insert 1000 random vectors
demo.insert_data(1000)def demonstrate_vector_search(self) -> NoneDemonstrates basic vector search capabilities, including filtered searches.
Parameters: None
Returns: None
Example:
demo.demonstrate_vector_search()def demonstrate_scrolling(
self,
batches: int = settings.DEFAULT_BATCH_COUNT,
batch_size: int = settings.DEFAULT_BATCH_SIZE
) -> NoneDemonstrates the scrolling API for paginating through large result sets.
Parameters:
batches(int): Number of batches to retrievebatch_size(int): Size of each batch
Returns: None
Example:
# Retrieve 5 batches of 20 points each
demo.demonstrate_scrolling(batches=5, batch_size=20)def get_cluster_stats(self) -> NoneRetrieves and displays collection and cluster statistics.
Parameters: None
Returns: None
Example:
demo.get_cluster_stats()The data_generator module provides utilities for generating random vector data.
from qdrant_demo.utils import data_generatordef generate_random_vector(vector_size: int = settings.VECTOR_SIZE) -> List[float]Generates a random vector of specified dimensions.
Parameters:
vector_size(int): Size of the vector to generate
Returns:
- List[float]: A list of float values representing a random vector
Example:
# Generate a random vector with 768 dimensions
vector = data_generator.generate_random_vector(768)def generate_random_category() -> strGenerates a random category from the predefined list.
Parameters: None
Returns:
- str: A random category name
Example:
category = data_generator.generate_random_category()def generate_payload() -> Dict[str, Any]Generates a random payload for a vector point.
Parameters: None
Returns:
- Dict[str, Any]: A dictionary containing category, score, and timestamp
Example:
payload = data_generator.generate_payload()For more advanced use cases, you can use the Qdrant client directly:
from qdrant_client import QdrantClient
from qdrant_client.http import models
client = QdrantClient(host="localhost", port=6333)client.create_collection(
collection_name="my_collection",
shard_number=4,
vectors_config=models.VectorParams(
size=768,
distance=models.Distance.COSINE
),
optimizers_config=models.OptimizersConfigDiff(
indexing_threshold=20000,
memmap_threshold=50000
),
on_disk_payload=True
)client.upsert(
collection_name="my_collection",
points=[
models.PointStruct(
id=1,
vector=[0.1, 0.2, 0.3, ...],
payload={"category": "electronics", "score": 7.5}
),
],
)search_result = client.search(
collection_name="my_collection",
query_vector=[0.1, 0.2, 0.3, ...],
limit=5
)filtered_search_result = client.search(
collection_name="my_collection",
query_vector=[0.1, 0.2, 0.3, ...],
query_filter=models.Filter(
must=[
models.FieldCondition(
key="category",
match=models.MatchValue(value="electronics")
),
models.FieldCondition(
key="score",
range=models.Range(
gte=5.0,
)
)
]
),
limit=5
)offset = None
batch_size = 10
while True:
scroll_result = client.scroll(
collection_name="my_collection",
limit=batch_size,
offset=offset,
with_payload=True,
with_vectors=False,
)
points, offset = scroll_result
# Process points here...
if offset is None:
break # No more points to retrievecollection_info = client.get_collection("my_collection")The project provides a command-line interface for running the demo:
python src/run_demo.py --host localhost --port 6333 --points 2000--host: Hostname or IP address of the Qdrant server (default: localhost)--port: Port number of the Qdrant server (default: 6333)--points: Number of random points to generate and insert (default: 1000)