QQL is a SQL-like query language and CLI for Qdrant vector database. Write INSERT, SEARCH, RECOMMEND, DELETE, and CREATE COLLECTION statements instead of Python SDK calls. Supports hybrid dense+sparse vector search, cross-encoder reranking, quantization (scalar, turbo, binary, product), WHERE clause filters, script execution, and collection dump/restore.
Project description
QQL — Qdrant Query Language
SQL-like query language and CLI for Qdrant vector database.
Write INSERT, SELECT, SEARCH, SCROLL, RECOMMEND, DELETE, and CREATE COLLECTION statements instead of Python SDK calls. Supports hybrid dense+sparse vector search, cross-encoder reranking, quantization (scalar, turbo, binary, product), SQL-style WHERE filters, script execution, and collection dump/restore.
qql> INSERT INTO COLLECTION notes VALUES {'text': 'Qdrant is a vector database', 'author': 'alice', 'year': 2024}
✓ Inserted 1 point [3f2e1a4b-8c91-4d0e-b123-abc123def456]
qql> SEARCH notes SIMILAR TO 'vector storage engines' LIMIT 3 WHERE year >= 2023
✓ Found 1 result(s)
Score │ ID │ Payload
────────┼──────────────────────────────────────┼──────────────────────────────────────
0.8931 │ 3f2e1a4b-8c91-4d0e-b123-abc123def456 │ {'text': 'Qdrant is a ...', 'author': 'alice', 'year': 2024}
qql> SEARCH notes SIMILAR TO 'vector databases' LIMIT 5 USING HYBRID RERANK
✓ Found 1 result(s) (hybrid, reranked)
Score │ ID │ Payload
────────┼──────────────────────────────────────┼──────────────────────────────────────
5.3754 │ 3f2e1a4b-8c91-4d0e-b123-abc123def456 │ {'text': 'Qdrant is a ...', 'author': 'alice', 'year': 2024}
How It Works
QQL is a thin translation layer between a SQL-like query language and the Qdrant Python client. Every statement you type goes through three stages:
Your query string
│
▼
[ Lexer ] — tokenizes the input into keywords, identifiers, literals
│
▼
[ Parser ] — builds a typed AST node (e.g. InsertStmt, SearchStmt)
│
▼
[ Executor ] — maps the AST node to a Qdrant client call
│
▼
Qdrant instance
When you run INSERT, the text field is automatically converted into a dense vector using Fastembed. In hybrid mode (USING HYBRID), a sparse BM25 vector is also generated alongside the dense vector, and searches use Qdrant's Reciprocal Rank Fusion (RRF) by default to merge the results of both retrieval methods. You can switch hybrid search to DBSF with FUSION 'dbsf'.
Installation
Requirements: Python 3.12+, a running Qdrant instance.
pip install qql-cli
Connect to a Qdrant instance:
# Local
qql connect --url http://localhost:6333
# Qdrant Cloud
qql connect --url https://<your-cluster>.qdrant.io --secret <your-api-key>
Then type qql to open the interactive shell.
Documentation
Full documentation lives in the docs/ folder and at pavanjava.github.io/qql:
| Topic | Description |
|---|---|
| Getting Started | Installation, connecting, first queries |
| INSERT / INSERT BULK | Adding documents, batch inserts, payload types |
| SEARCH / SELECT / SCROLL / RECOMMEND / Hybrid / RERANK | Semantic search, point retrieval, pagination, hybrid, reranking, recommendations |
| WHERE Filters | Full SQL-style filter operators |
| Collections & Quantization | CREATE, DROP, QUANTIZE (scalar/turbo/binary/product), CREATE INDEX |
| Scripts: EXECUTE / DUMP | Script files, collection backup/restore |
| Programmatic Usage | Use QQL as a Python library |
| Reference: Models / Config / Errors | Embedding models, config file, error reference |
Quick Syntax Reference
-- Insert
INSERT INTO COLLECTION articles VALUES {'text': '...', 'year': 2024}
INSERT BULK INTO COLLECTION articles VALUES [{'text': '...'}, {'text': '...'}]
-- Search
SEARCH articles SIMILAR TO 'query' LIMIT 10
SEARCH articles SIMILAR TO 'query' LIMIT 10 WHERE year >= 2020
SEARCH articles SIMILAR TO 'query' LIMIT 10 USING HYBRID
SEARCH articles SIMILAR TO 'query' LIMIT 10 USING HYBRID FUSION 'dbsf'
SEARCH articles SIMILAR TO 'query' LIMIT 10 USING HYBRID RERANK
-- Scroll
SCROLL FROM articles LIMIT 50
SCROLL FROM articles WHERE year >= 2024 LIMIT 50
SCROLL FROM articles AFTER 'cursor-id' LIMIT 50
-- Recommend
RECOMMEND FROM articles POSITIVE IDS (1001, 1002) LIMIT 5
-- Select (retrieve a point by ID)
SELECT * FROM articles WHERE id = '3f2e1a4b-...'
-- Collections
CREATE COLLECTION articles
CREATE COLLECTION articles HYBRID
CREATE COLLECTION articles QUANTIZE SCALAR
CREATE COLLECTION articles QUANTIZE TURBO
CREATE COLLECTION articles QUANTIZE TURBO BITS 2
CREATE COLLECTION articles QUANTIZE TURBO BITS 1.5 ALWAYS RAM
CREATE INDEX ON COLLECTION articles FOR year TYPE integer
SHOW COLLECTIONS
DROP COLLECTION articles
-- Delete
DELETE FROM articles WHERE id = '3f2e1a4b-...'
DELETE FROM articles WHERE year < 2020
-- Scripts
EXECUTE /path/to/script.qql
DUMP articles /path/to/backup.qql
Running Tests
Tests do not require a running Qdrant instance — the Qdrant client is mocked.
pytest tests/ -v
Expected: 405 tests passing.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file qql_cli-2.2.0.tar.gz.
File metadata
- Download URL: qql_cli-2.2.0.tar.gz
- Upload date:
- Size: 81.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ff27c8a63bed670c2a48ae5e67fb12673e82dbb986d44b9b7d173ac0245bdd8c
|
|
| MD5 |
dd7d48e4c9d200de9c2f6370ae386fa3
|
|
| BLAKE2b-256 |
68e4b66804d715e279dc12ea492b6322e678401a0e95a4718e9e9a7eada55b92
|
File details
Details for the file qql_cli-2.2.0-py3-none-any.whl.
File metadata
- Download URL: qql_cli-2.2.0-py3-none-any.whl
- Upload date:
- Size: 35.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
338e690349d3494110199c897319230cae23f10071c7451fd9261c5ae83cf5a9
|
|
| MD5 |
b78aeb2d4a6263ae8c5525b3dbd44a61
|
|
| BLAKE2b-256 |
8410d40fcec7b4f9de3ba305ba60f473ce24044e7760b85cbaa337f331db5145
|