{"id":167989,"date":"2026-06-02T14:00:00","date_gmt":"2026-06-02T11:00:00","guid":{"rendered":"https:\/\/computingforgeeks.com\/?p=167989"},"modified":"2026-05-27T00:35:45","modified_gmt":"2026-05-26T21:35:45","slug":"qdrant-cheat-sheet","status":"publish","type":"post","link":"https:\/\/computingforgeeks.com\/qdrant-cheat-sheet\/","title":{"rendered":"Qdrant Commands and API Cheat Sheet"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">This Qdrant cheat sheet is the one-page reference we reach for when running the vector database in real workloads. It covers the commands, REST and gRPC API calls, filter shapes, snapshots, cluster operations, and the configuration env var pattern in one scannable layout. Pin it next to your terminal. For the LLM side of a RAG stack, our <a href=\"https:\/\/computingforgeeks.com\/ollama-commands-cheat-sheet\/\">Ollama commands cheat sheet<\/a> is the companion reference.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Every command below was tested against Qdrant <strong>v1.18.x<\/strong>. Where you see <code>${QDRANT_VERSION}<\/code> in a script, detect the latest with <code>curl -s https:\/\/api.github.com\/repos\/qdrant\/qdrant\/releases\/latest | jq -r .tag_name<\/code>. For the full series, start with our <strong>Qdrant vector database guide<\/strong>. The official reference lives in the <a href=\"https:\/\/qdrant.tech\/documentation\/\" rel=\"noopener\" target=\"_blank\">Qdrant documentation<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ports, defaults, and key URLs<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Port \/ Path<\/th><th>Purpose<\/th><\/tr><\/thead><tbody><tr><td><code>6333<\/code><\/td><td>REST API and Web UI<\/td><\/tr><tr><td><code>6334<\/code><\/td><td>gRPC API<\/td><\/tr><tr><td><code>6335<\/code><\/td><td>P2P \/ raft consensus (cluster only)<\/td><\/tr><tr><td><code>\/dashboard<\/code><\/td><td>Built in Web UI<\/td><\/tr><tr><td><code>\/healthz<\/code><\/td><td>Liveness check<\/td><\/tr><tr><td><code>\/readyz<\/code><\/td><td>Readiness check<\/td><\/tr><tr><td><code>\/metrics<\/code><\/td><td>Prometheus \/ OpenMetrics<\/td><\/tr><tr><td><code>\/sys_metrics<\/code><\/td><td>System level metrics (host CPU, RAM, disk)<\/td><\/tr><tr><td><code>\/cluster<\/code><\/td><td>Cluster status<\/td><\/tr><tr><td><code>\/collections<\/code><\/td><td>Collection list<\/td><\/tr><tr><td><code>\/qdrant\/storage<\/code><\/td><td>Default storage path inside the container<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Run Qdrant with Docker<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The fastest way to a working Qdrant. Persistent storage, both ports exposed, container restarts itself.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run -d --name qdrant \\\n  -p 6333:6333 -p 6334:6334 \\\n  -v \"$(pwd)\/qdrant_storage:\/qdrant\/storage:z\" \\\n  --restart unless-stopped \\\n  qdrant\/qdrant<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">With an API key set via env var (recommended for anything reachable beyond localhost):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run -d --name qdrant \\\n  -p 6333:6333 -p 6334:6334 \\\n  -v \"$(pwd)\/qdrant_storage:\/qdrant\/storage:z\" \\\n  -e QDRANT__SERVICE__API_KEY=\"$(openssl rand -base64 32)\" \\\n  --restart unless-stopped \\\n  qdrant\/qdrant<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">GPU enabled image (Qdrant 1.13+, used by the indexing path):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run -d --name qdrant \\\n  --gpus all \\\n  -p 6333:6333 -p 6334:6334 \\\n  -v \"$(pwd)\/qdrant_storage:\/qdrant\/storage:z\" \\\n  qdrant\/qdrant:${QDRANT_VERSION}-gpu-nvidia<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Docker Compose snippet<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A reusable Compose file with persistent storage, an API key from env, and a memory limit for production:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>services:\n  qdrant:\n    image: qdrant\/qdrant:${QDRANT_VERSION}  # https:\/\/github.com\/qdrant\/qdrant\/releases\n    container_name: qdrant\n    restart: unless-stopped\n    ports:\n      - \"6333:6333\"\n      - \"6334:6334\"\n    volumes:\n      - .\/qdrant_storage:\/qdrant\/storage:z\n      - .\/qdrant_snapshots:\/qdrant\/snapshots:z\n    environment:\n      QDRANT__SERVICE__API_KEY: ${QDRANT_API_KEY}\n    deploy:\n      resources:\n        limits:\n          memory: 4G<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Native install one-liners<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>OS<\/th><th>Install<\/th><\/tr><\/thead><tbody><tr><td>Ubuntu \/ Debian<\/td><td><code>wget https:\/\/github.com\/qdrant\/qdrant\/releases\/download\/${QDRANT_VERSION}\/qdrant_${QDRANT_VERSION#v}_amd64.deb &amp;&amp; sudo apt install .\/qdrant_*_amd64.deb<\/code><\/td><\/tr><tr><td>Rocky \/ RHEL<\/td><td>Use the Docker or Podman path. Native RPM is not officially published; build from source with cargo if you really need it.<\/td><\/tr><tr><td>Build from source<\/td><td><code>cargo install --git https:\/\/github.com\/qdrant\/qdrant --tag ${QDRANT_VERSION}<\/code> (requires Rust toolchain and protoc)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">systemd service for a native install<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Drop this unit file at <code>\/etc\/qdrant\/qdrant.service<\/code> for a native (non-Docker) install:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \/etc\/systemd\/system\/qdrant.service\n[Unit]\nDescription=Qdrant Vector Database\nAfter=network.target\n\n[Service]\nType=simple\nUser=qdrant\nGroup=qdrant\nExecStart=\/usr\/bin\/qdrant --config-path \/etc\/qdrant\/config.yaml\nRestart=on-failure\nRestartSec=5\nLimitNOFILE=65536\n\n[Install]\nWantedBy=multi-user.target<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Create the user, the storage directories, and enable the unit:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo useradd -r -s \/sbin\/nologin qdrant\nsudo mkdir -p \/var\/lib\/qdrant\/storage \/etc\/qdrant\nsudo chown -R qdrant:qdrant \/var\/lib\/qdrant\nsudo systemctl daemon-reload\nsudo systemctl enable --now qdrant\nsudo systemctl status qdrant<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Health and readiness<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Three endpoints cover liveness, readiness, and version reporting:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Liveness\ncurl -s http:\/\/localhost:6333\/healthz\n\n# Readiness (returns 200 only when collections are loaded)\ncurl -s http:\/\/localhost:6333\/readyz\n\n# Telemetry \/ version\ncurl -s http:\/\/localhost:6333\/telemetry | jq '.app.version'<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Collections: create, list, delete<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Collections are the top level container. Create, list, inspect, and delete with these calls:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Create a collection (768-dim, cosine distance)\ncurl -X PUT http:\/\/localhost:6333\/collections\/articles \\\n  -H \"api-key: $QDRANT_API_KEY\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"vectors\": {\n      \"size\": 768,\n      \"distance\": \"Cosine\"\n    }\n  }'\n\n# List\ncurl -s http:\/\/localhost:6333\/collections -H \"api-key: $QDRANT_API_KEY\"\n\n# Get config and stats\ncurl -s http:\/\/localhost:6333\/collections\/articles -H \"api-key: $QDRANT_API_KEY\"\n\n# Delete\ncurl -X DELETE http:\/\/localhost:6333\/collections\/articles -H \"api-key: $QDRANT_API_KEY\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Collection with named vectors (dense + sparse for hybrid search):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -X PUT http:\/\/localhost:6333\/collections\/articles \\\n  -H \"api-key: $QDRANT_API_KEY\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"vectors\": {\n      \"dense\": {\"size\": 768, \"distance\": \"Cosine\"}\n    },\n    \"sparse_vectors\": {\n      \"bm25\": {}\n    }\n  }'<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Points: upsert, get, delete, scroll<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Upserts, deletes, scroll, and count all live under the collection&apos;s points path:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Upsert with payload\ncurl -X PUT http:\/\/localhost:6333\/collections\/articles\/points \\\n  -H \"api-key: $QDRANT_API_KEY\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"points\": [\n      {\n        \"id\": 1,\n        \"vector\": [0.1, 0.2, 0.3, \"...\"],\n        \"payload\": {\"title\": \"Qdrant Guide\", \"tags\": [\"ai\", \"vector\"]}\n      }\n    ]\n  }'\n\n# Get by ID\ncurl -s http:\/\/localhost:6333\/collections\/articles\/points\/1 -H \"api-key: $QDRANT_API_KEY\"\n\n# Delete by ID\ncurl -X POST http:\/\/localhost:6333\/collections\/articles\/points\/delete \\\n  -H \"api-key: $QDRANT_API_KEY\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\"points\": [1, 2, 3]}'\n\n# Scroll (paginate through all points)\ncurl -X POST http:\/\/localhost:6333\/collections\/articles\/points\/scroll \\\n  -H \"api-key: $QDRANT_API_KEY\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\"limit\": 100, \"with_payload\": true, \"with_vector\": false}'\n\n# Count\ncurl -X POST http:\/\/localhost:6333\/collections\/articles\/points\/count \\\n  -H \"api-key: $QDRANT_API_KEY\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\"exact\": true}'<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Search and the modern query API<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The legacy <code>\/search<\/code> endpoint still works, but new code should use <code>\/query<\/code> which adds prefetch, hybrid retrieval, and rescoring:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Basic search\ncurl -X POST http:\/\/localhost:6333\/collections\/articles\/points\/search \\\n  -H \"api-key: $QDRANT_API_KEY\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"vector\": [0.1, 0.2, 0.3, \"...\"],\n    \"limit\": 10,\n    \"with_payload\": true\n  }'\n\n# Modern query_points (v1.10+) with prefetch + filter\ncurl -X POST http:\/\/localhost:6333\/collections\/articles\/points\/query \\\n  -H \"api-key: $QDRANT_API_KEY\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"query\": [0.1, 0.2, 0.3, \"...\"],\n    \"limit\": 10,\n    \"filter\": {\n      \"must\": [{\"key\": \"tags\", \"match\": {\"value\": \"ai\"}}]\n    }\n  }'\n\n# Recommend (positives and negatives)\ncurl -X POST http:\/\/localhost:6333\/collections\/articles\/points\/recommend \\\n  -H \"api-key: $QDRANT_API_KEY\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"positive\": [1, 5],\n    \"negative\": [99],\n    \"limit\": 10\n  }'<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Filter syntax cheat card<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Clause<\/th><th>Example<\/th><\/tr><\/thead><tbody><tr><td><code>match<\/code><\/td><td><code>{\"key\":\"category\",\"match\":{\"value\":\"books\"}}<\/code><\/td><\/tr><tr><td><code>match any<\/code><\/td><td><code>{\"key\":\"tag\",\"match\":{\"any\":[\"ai\",\"ml\"]}}<\/code><\/td><\/tr><tr><td><code>range<\/code><\/td><td><code>{\"key\":\"price\",\"range\":{\"gte\":10,\"lt\":100}}<\/code><\/td><\/tr><tr><td><code>geo_bounding_box<\/code><\/td><td><code>{\"key\":\"loc\",\"geo_bounding_box\":{\"top_left\":{...},\"bottom_right\":{...}}}<\/code><\/td><\/tr><tr><td><code>geo_radius<\/code><\/td><td><code>{\"key\":\"loc\",\"geo_radius\":{\"center\":{...},\"radius\":5000}}<\/code><\/td><\/tr><tr><td><code>full text<\/code><\/td><td><code>{\"key\":\"body\",\"match\":{\"text\":\"vector search\"}}<\/code><\/td><\/tr><tr><td><code>is_null<\/code><\/td><td><code>{\"is_null\":{\"key\":\"deleted_at\"}}<\/code><\/td><\/tr><tr><td><code>nested<\/code><\/td><td><code>{\"key\":\"meta.tags[]\",\"match\":{\"value\":\"ai\"}}<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Compose with <code>must<\/code>, <code>should<\/code>, and <code>must_not<\/code>. Always pair high cardinality keyword fields with a payload index for fast filtered search.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Create a payload index (one-time, per field)\ncurl -X PUT http:\/\/localhost:6333\/collections\/articles\/index \\\n  -H \"api-key: $QDRANT_API_KEY\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\"field_name\": \"tags\", \"field_schema\": \"keyword\"}'<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Snapshots: create, list, restore<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Snapshots are the simplest backup path. The same endpoints handle create, list, download, and restore:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Create a collection snapshot\ncurl -X POST http:\/\/localhost:6333\/collections\/articles\/snapshots \\\n  -H \"api-key: $QDRANT_API_KEY\"\n\n# List\ncurl -s http:\/\/localhost:6333\/collections\/articles\/snapshots -H \"api-key: $QDRANT_API_KEY\"\n\n# Download\ncurl -OJ http:\/\/localhost:6333\/collections\/articles\/snapshots\/&lt;snapshot-name&gt; \\\n  -H \"api-key: $QDRANT_API_KEY\"\n\n# Restore from URL\ncurl -X PUT http:\/\/localhost:6333\/collections\/articles\/snapshots\/recover \\\n  -H \"api-key: $QDRANT_API_KEY\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\"location\": \"http:\/\/backups.example.com\/articles.snapshot\"}'\n\n# Restore from upload (multipart)\ncurl -X POST http:\/\/localhost:6333\/collections\/articles\/snapshots\/upload \\\n  -H \"api-key: $QDRANT_API_KEY\" \\\n  -F \"snapshot=@articles.snapshot\"\n\n# Full storage snapshot (single node only)\ncurl -X POST http:\/\/localhost:6333\/snapshots -H \"api-key: $QDRANT_API_KEY\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">S3 snapshot backend (since v1.10), configured in <code>config.yaml<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>storage:\n  snapshots_config:\n    snapshots_storage: s3\n    s3_config:\n      bucket: my-qdrant-snapshots\n      region: eu-central-1\n      access_key: AKIA...\n      secret_key: ...\n      endpoint_url: https:\/\/s3.eu-central-1.amazonaws.com<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Cluster operations<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cluster mode adds raft consensus, sharding, and replication. Enable it in <code>config.yaml<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Enable cluster mode in config.yaml\ncluster:\n  enabled: true\n  p2p:\n    port: 6335\n  consensus:\n    tick_period_ms: 100<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Bootstrap the first node, then join the rest with the <code>--bootstrap<\/code> flag pointing at any existing peer:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Bootstrap node 1 (first in the cluster)\nqdrant --config-path \/etc\/qdrant\/config.yaml --uri http:\/\/node1:6335\n\n# Join nodes 2 and 3\nqdrant --config-path \/etc\/qdrant\/config.yaml \\\n  --bootstrap http:\/\/node1:6335 \\\n  --uri http:\/\/node2:6335\n\n# Cluster status\ncurl -s http:\/\/localhost:6333\/cluster -H \"api-key: $QDRANT_API_KEY\"\n\n# Create collection with sharding and replication\ncurl -X PUT http:\/\/localhost:6333\/collections\/articles \\\n  -H \"api-key: $QDRANT_API_KEY\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"vectors\": {\"size\": 768, \"distance\": \"Cosine\"},\n    \"shard_number\": 6,\n    \"replication_factor\": 2,\n    \"write_consistency_factor\": 1\n  }'\n\n# Move a shard between peers\ncurl -X POST http:\/\/localhost:6333\/collections\/articles\/cluster \\\n  -H \"api-key: $QDRANT_API_KEY\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"move_shard\": {\n      \"shard_id\": 0,\n      \"from_peer_id\": 1,\n      \"to_peer_id\": 3\n    }\n  }'<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Helm one-liners<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The official Helm chart wraps a StatefulSet plus a PVC per pod. Add the repo and install with the right flags for your topology:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>helm repo add qdrant https:\/\/qdrant.github.io\/qdrant-helm\nhelm repo update\n\n# Single node\nhelm install qdrant qdrant\/qdrant \\\n  --namespace qdrant --create-namespace \\\n  --set apiKey=$(openssl rand -base64 32)\n\n# 3 node cluster with persistence\nhelm install qdrant qdrant\/qdrant \\\n  --namespace qdrant --create-namespace \\\n  --set replicaCount=3 \\\n  --set config.cluster.enabled=true \\\n  --set persistence.size=50Gi \\\n  --set apiKey=$(openssl rand -base64 32)\n\n# Upgrade\nhelm upgrade qdrant qdrant\/qdrant -n qdrant -f values.yaml<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Python client one-page<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>qdrant-client<\/code> Python package mirrors the REST API one-to-one. A working starter:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from qdrant_client import QdrantClient\nfrom qdrant_client.models import (\n    Distance, VectorParams, PointStruct,\n    Filter, FieldCondition, MatchValue, Range,\n)\n\nclient = QdrantClient(url=\"http:\/\/localhost:6333\", api_key=\"...\")\n\n# Create\nclient.create_collection(\n    collection_name=\"articles\",\n    vectors_config=VectorParams(size=768, distance=Distance.COSINE),\n)\n\n# Upsert\nclient.upsert(\n    collection_name=\"articles\",\n    points=[\n        PointStruct(id=1, vector=[0.1] * 768, payload={\"title\": \"Qdrant Guide\"}),\n    ],\n)\n\n# Search with filter\nhits = client.query_points(\n    collection_name=\"articles\",\n    query=[0.1] * 768,\n    query_filter=Filter(\n        must=[FieldCondition(key=\"title\", match=MatchValue(value=\"Qdrant Guide\"))]\n    ),\n    limit=10,\n    with_payload=True,\n).points\n\n# Create payload index\nclient.create_payload_index(\n    collection_name=\"articles\",\n    field_name=\"title\",\n    field_schema=\"keyword\",\n)\n\n# Snapshot\nclient.create_snapshot(collection_name=\"articles\")<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Configuration env var pattern<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Every key in <code>config.yaml<\/code> can be overridden by an environment variable using <code>QDRANT__SECTION__KEY<\/code>. Two underscores separate levels.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Env var<\/th><th>Effect<\/th><\/tr><\/thead><tbody><tr><td><code>QDRANT__SERVICE__API_KEY<\/code><\/td><td>Static API key for all requests<\/td><\/tr><tr><td><code>QDRANT__SERVICE__JWT_RBAC<\/code><\/td><td>Enable JWT based RBAC (also needs API key)<\/td><\/tr><tr><td><code>QDRANT__SERVICE__HTTP_PORT<\/code><\/td><td>REST port (default 6333)<\/td><\/tr><tr><td><code>QDRANT__SERVICE__GRPC_PORT<\/code><\/td><td>gRPC port (default 6334)<\/td><\/tr><tr><td><code>QDRANT__SERVICE__ENABLE_TLS<\/code><\/td><td>Built in TLS (with <code>tls.cert<\/code> + <code>tls.key<\/code>)<\/td><\/tr><tr><td><code>QDRANT__STORAGE__STORAGE_PATH<\/code><\/td><td>Storage root (default <code>.\/storage<\/code>)<\/td><\/tr><tr><td><code>QDRANT__STORAGE__SNAPSHOTS_PATH<\/code><\/td><td>Snapshots root (default <code>.\/snapshots<\/code>)<\/td><\/tr><tr><td><code>QDRANT__LOG_LEVEL<\/code><\/td><td><code>debug<\/code>, <code>info<\/code>, <code>warn<\/code>, <code>error<\/code><\/td><\/tr><tr><td><code>QDRANT__CLUSTER__ENABLED<\/code><\/td><td>Turn on cluster mode<\/td><\/tr><tr><td><code>QDRANT__TELEMETRY_DISABLED<\/code><\/td><td>Disable anonymous telemetry<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Web UI URLs<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>URL<\/th><th>What it shows<\/th><\/tr><\/thead><tbody><tr><td><code>\/dashboard<\/code><\/td><td>Main UI<\/td><\/tr><tr><td><code>\/dashboard#\/welcome<\/code><\/td><td>First time welcome page<\/td><\/tr><tr><td><code>\/dashboard#\/collections<\/code><\/td><td>Collections list<\/td><\/tr><tr><td><code>\/dashboard#\/console<\/code><\/td><td>Browser REST runner<\/td><\/tr><tr><td><code>\/dashboard#\/tutorial<\/code><\/td><td>Interactive tutorial<\/td><\/tr><tr><td><code>\/dashboard#\/datasets<\/code><\/td><td>Bundled sample datasets<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Common gotchas<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>NFS or object storage as the storage backend<\/strong>. Not supported. Qdrant needs block storage with POSIX semantics. Use a PVC backed by a CSI driver that gives you a block volume.<\/li>\n\n\n<li><strong>Forgetting to set the API key before turning on JWT<\/strong>. The API key is the HMAC secret used to sign and verify JWTs. Set <code>QDRANT__SERVICE__API_KEY<\/code> first, then enable <code>jwt_rbac<\/code>.<\/li>\n\n\n<li><strong>Filtered search without a payload index<\/strong>. The search still works, but it linear scans the filter side. Always create a payload index for high cardinality keyword fields.<\/li>\n\n\n<li><strong>Binary quantization without rescoring<\/strong>. Default behaviour is good, but if you turned rescoring off, expect a recall drop of 5 to 10 percent. Turn it back on or accept the trade.<\/li>\n\n\n<li><strong>Restoring an S3 snapshot directly<\/strong>. Qdrant cannot pull from S3 on restore. Download to a local file, then call the <code>\/snapshots\/upload<\/code> endpoint.<\/li>\n\n\n<li><strong>Cluster of size 2<\/strong>. Raft needs more than half the nodes alive to make progress, so a 2 node cluster cannot tolerate a single failure. Run 1, 3, or 5.<\/li>\n\n\n<li><strong>Default Docker run is open<\/strong>. No auth and no TLS. Fine on a laptop, never on a public host. See our <strong>secure Qdrant with API key, TLS, and Nginx<\/strong> article in this series.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Next steps<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If you want the full context behind these commands, the pillar <strong>Qdrant vector database guide<\/strong> ties everything in this series together. Looking for the equivalent commands for a Postgres-based vector store, our <a href=\"https:\/\/computingforgeeks.com\/install-pgvector-postgresql-linux\/\">install pgvector<\/a> walkthrough is the parallel reference.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Qdrant cheat sheet with Docker, Compose, Helm, REST and gRPC API examples, filter syntax, snapshots, cluster commands, and Web UI URLs.<\/p>\n","protected":false},"author":3,"featured_media":167988,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[39034,461,35913,50],"tags":[],"cfg_series":[39865],"class_list":["post-167989","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai","category-databases","category-devops","category-linux-tutorials","cfg_series-qdrant-mastery"],"_links":{"self":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/167989","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/comments?post=167989"}],"version-history":[{"count":2,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/167989\/revisions"}],"predecessor-version":[{"id":168127,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/posts\/167989\/revisions\/168127"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/media\/167988"}],"wp:attachment":[{"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/media?parent=167989"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/categories?post=167989"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/tags?post=167989"},{"taxonomy":"cfg_series","embeddable":true,"href":"https:\/\/computingforgeeks.com\/wp-json\/wp\/v2\/cfg_series?post=167989"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}