FineWeb-10B slice benchmark — Qdrant vs Milvus vs Elasticsearch, all scored against one shared exact ground truth and swept across each engine's search-effort knob for a recall/latency curve A developer published a shell-script benchmark harness that compares Qdrant, Milvus and Elasticsearch on a FineWeb-10B slice, scoring all three engines against a single shared exact brute-force ground truth and sweeping each engine's search-effort knob (hnsw_ef, ef, num_candidates) to produce recall/latency curves rather than single-point results. The script is environment-configured, writes only to a ROOT directory, and was verified end to end on the Qdrant path, with the Milvus and Elasticsearch sweep schemas flagged as less tested and a fast-failing probe subcommand provided to name offending config fields. | | /usr/bin/env bash | | | ============================================================================= | | | FineWeb-10B slice benchmark — Qdrant vs Milvus vs Elasticsearch | | | | | | One exact ground truth brute force over YOUR slice , reused by every engine, | | | so all three are scored against identical correct answers. Each engine is then | | | swept across its search-effort knob to produce a recall/latency CURVE rather | | | than a single point. | | | | | | ./bench.sh all everything, Qdrant only | | | ENGINES="qdrant milvus elastic" ./bench.sh all | | | ./bench.sh probe milvus validate one config, fast | | | ./bench.sh report | | | | | | REQUIRES, on PATH | | | nova with bf and sweep subcommands | | | nova-load built with --features elastic,milvus for the non-Qdrant paths | | | docker with a compose file in the working directory see SERVICES | | | hf HuggingFace CLI, for the dataset | | | python with pyarrow and pandas | | | | | | CONFIGURE entirely through the environment — nothing here is tied to a | | | particular machine, and ROOT is the only directory the script writes to: | | | | | | ROOT where everything lands default $HOME/qfw-bench | | | ENGINES which to run default "qdrant" | | | SHARDS dataset shards to download default 1 | | | QUERY LIMIT / TOP K / GT K / DURATION S / CONCURRENCY | | | QDRANT URL / MILVUS URL / ELASTIC URL point at your own endpoints | | | NO DOCKER=1 use already-running services and skip compose entirely | | | FORCE=1 redo a step that would otherwise be skipped as cached | | | | | | Verified end to end on the Qdrant path. The Milvus and Elasticsearch sweep | | | schemas are less travelled — run ./bench.sh probe