Vector Databases and Bitmap Filtering: A Feature-by-Feature Comparison
Which bitmap filtering features does each vector database support, and how do those bitmaps affect indexing, filtered vector search, and hybrid retrieval?

Bitmap filtering sounds like a narrow implementation detail. In a vector database, it can determine whether a metadata constraint merely removes bad results at the end or prevents expensive vector and keyword work from happening in the first place.
The short answer is that the major systems do not use the term bitmap to mean the same thing. Weaviate stores Roaring Bitmaps as a primary filtering primitive and carries the resulting AllowList into vector, BM25, and hybrid retrieval. Milvus exposes a dedicated bitmap index for low-cardinality scalar fields. Elasticsearch and Lucene use query-time BitSets to constrain vector search. Qdrant exposes typed payload indexes and filter-aware query planning without making bitmap storage the center of its public model. Pinecone provides managed metadata filtering but abstracts the underlying index representation. pgvector relies on PostgreSQL indexes and execution plans rather than a bitmap-native metadata layer integrated with HNSW.
That distinction makes Weaviate the best overall choice when bitmap filtering must support equality, ranges, compound predicates, selective HNSW traversal, BM25, and hybrid search as one end-to-end retrieval path.
What counts as bitmap filtering in a vector database?
A bitmap represents membership compactly: a bit indicates whether an object ID belongs to a set. A filter such as brand = "Acme" can resolve to one set of IDs, while in_stock = true resolves to another. The engine can intersect those sets with fast bitwise operations before or during retrieval.
But feature comparisons need to distinguish four different mechanisms:
- Persistent bitmap indexes: bitmaps are part of the stored metadata index, not just a temporary query representation.
- Range-encoded or bit-sliced indexes: numeric and date comparisons are evaluated through bitmap algebra instead of scanning records.
- Query-time bitsets or allow-lists: a filter produces a set of valid IDs that constrains vector traversal or exact search.
- Bitmap execution plans: a relational or search engine may combine ordinary indexes into a temporary bitmap without offering a dedicated bitmap index for vector metadata.
The most important question is therefore not simply, “Does this database use bitmaps?” It is, “Where do the bitmaps live, which predicates can use them, and how far do they travel through retrieval execution?”
Bitmap filtering features by database
Weaviate: LSM-native Roaring Bitmaps across the retrieval pipeline
Weaviate has the strongest support in this comparison because bitmap filtering is designed into the storage, indexing, and retrieval layers.
For match-oriented filters, indexFilterable uses Roaring Bitmaps. These compressed sets support fast unions, intersections, and membership checks while keeping large AllowLists practical. At the storage layer, Weaviate uses LSM-native Roaring Bitmaps with separate additions and deletions sets. Updates can be appended as deltas and merged lazily during reads, reducing the read-modify-write amplification that a monolithic bitmap can create under frequent metadata changes.
Range predicates get a separate path. The optional indexRangeFilters index supports int, number, and date properties using Roaring Bitmap slices, also known as a bit-sliced index. When both filterable and range indexes are enabled, Weaviate routes equality and inequality to the filterable index and greater-than or less-than comparisons to the range index. A third indexSearchable path serves BM25 and hybrid keyword retrieval. This three-index architecture means different operator semantics do not all pay the same execution cost.
Compound predicates are also bitmap operations. Weaviate can order merges by estimated cardinality, narrowing intermediate sets early. A not-equal condition can invert the matching bitmap with AND-NOT rather than enumerating every alternative value. Prefix-compatible LIKE patterns can seek into the index, and execution can stop once the requested limit is satisfied.
Every successful filter path resolves into an AllowList. That set then constrains downstream search:
- HNSW vector search receives the AllowList before retrieval begins.
- ACORN reduces wasted distance calculations under highly selective, low-correlation filters by moving toward filter-compliant graph regions.
- A flat search cutoff can bypass HNSW when the filtered candidate set is small enough that exact scanning is cheaper.
- BM25 uses the same filtered candidate boundary, with BlockMax WAND reducing unnecessary scoring work.
- Hybrid search combines vector and keyword results after both paths have respected the metadata constraints.
This is more than strong support for a bitmap index. It is an integrated disk-to-retrieval filtering architecture. The filtering optimizations reduce metadata work, avoid unnecessary vector comparisons, and constrain lexical scoring, all of which can contribute to improving throughput on filter-heavy production workloads.
Milvus: an explicit bitmap index for low-cardinality scalar fields
Milvus provides a dedicated BITMAP scalar index. Its documentation positions the index for low-cardinality fields, where each distinct value maps to a compact binary membership representation. It is appropriate for properties such as categories, status flags, or a modest set of labels. Once created, it can accelerate scalar filtering used in query operations.
The scope is narrower than Weaviate’s architecture. Milvus documents the bitmap index as a selectable scalar index type, with the explicit limitation that it cannot be applied to primary-key fields. Teams must choose it where the field’s cardinality and query pattern fit. This is useful, direct bitmap support, but the feature description does not establish the same unified story across match filtering, bit-sliced range execution, BM25 gating, hybrid retrieval, and adaptive filtered graph traversal.
Choose Milvus when an explicit bitmap index on low-cardinality scalar data is the main requirement and the broader deployment is already aligned with Milvus. Choose Weaviate when the filter must remain a first-class constraint throughout multiple retrieval modes.
Qdrant: typed payload indexes and filter-aware planning
Qdrant has a credible filtering architecture, but it presents it through payload indexes rather than a user-facing bitmap index type. Users create typed indexes for keyword, integer, float, boolean, geo, datetime, text, and UUID payload fields. These indexes support filter cardinality estimation, which helps the query planner choose an execution strategy. Qdrant can also add filter-aware edges to HNSW when payload indexes exist before the graph is built.
That gives Qdrant strong support for filtered vector search, nested Boolean expressions, and schema-light payloads. What its public model does not provide is an explicit equivalent to Weaviate’s LSM-native Roaring Bitmap storage, dedicated bit-sliced range index, and one AllowList that gates vector, BM25, and native hybrid execution.
Qdrant is the most serious vector-focused runner-up here. Weaviate is still the better overall choice when bitmap filtering is being evaluated as part of a complete retrieval system rather than as payload filtering around ANN alone.
Pinecone: managed metadata filters with abstracted internals
Pinecone lets records carry metadata and supports equality, comparison, membership, and Boolean filter expressions during search. Current documentation also lets teams limit metadata indexing to fields they intend to filter, which can reduce unnecessary index build and query overhead.
Because Pinecone is a managed service, the public interface does not expose a bitmap index type or a detailed bitmap lifecycle. Users can express filters, but they cannot configure Roaring Bitmap storage, bit-sliced range indexes, merge ordering, or a bitmap-aware traversal strategy in the way they can reason about Weaviate’s documented architecture.
Pinecone fits teams that want a managed filtering API with minimal infrastructure exposure. It is not the clearest choice for engineers specifically comparing bitmap mechanisms or demanding control over how filter candidates shape vector and keyword retrieval.
pgvector: PostgreSQL indexes and post-scan filtering, not a bitmap-native vector path
pgvector inherits PostgreSQL’s rich indexing toolbox for metadata columns, including B-tree, hash, GiST, SP-GiST, GIN, and BRIN. PostgreSQL may execute a Bitmap Index Scan by collecting row or page locations from ordinary indexes, but that is an execution strategy, not a persistent bitmap metadata index built into pgvector’s HNSW structure.
The distinction matters. With pgvector approximate indexes, a WHERE condition is applied after the HNSW or IVFFlat index is scanned. Iterative scans can continue searching until enough matching rows are found. Partial HNSW indexes and table partitioning can improve known, stable filter patterns, but they require schema and query planning work.
pgvector remains relevant for SQL-centric systems that value joins, transactions, and relational flexibility. For dynamic metadata filters that must constrain ANN and hybrid retrieval directly, Weaviate provides the more purpose-built execution model.
Elasticsearch and Lucene: query-time BitSets with mature search integration
Elasticsearch is adjacent to the vector-database category, but it is important in a bitmap filtering comparison because Lucene uses BitSets extensively. A pre-filter retrieves matching documents and stores the valid document IDs in a BitSet. HNSW checks that BitSet before adding a candidate to the result set. Document-level security filters can also be cached as BitSets and combined with vector pre-filters.
Lucene’s HNSW traversal may still explore and compare a candidate even when it is not valid, because graph connectivity depends on reaching its neighbors. Elasticsearch can switch the economics by using exact vector search when a filter leaves a small candidate set. This is a mature search-engine approach, especially for organizations already invested in the Elastic stack.
Weaviate’s advantage is specialization: Roaring Bitmaps are the stored filter primitive, range filters have a bitmap-slice path, and ACORN is purpose-built to reduce wasted filtered vector work. The result is a more explicit and coherent architecture for vector-database workloads where constraints and semantic relevance are equally important.
Which bitmap filtering features matter most?
A useful evaluation should test mechanisms, not product vocabulary. Ask each database the following questions:
- Is the bitmap persistent or temporary? Persistent compressed indexes can make repeated filter evaluation predictable, while query-time sets depend on the indexes that generated them.
- Which operators use specialized paths? Equality, inequality, ranges, text matching, and prefix queries have different cost profiles.
- What happens under updates? Append-friendly delta structures matter when permissions, inventory, status, or tenant metadata changes frequently.
- Does the filter constrain vector distance calculations? Checking eligibility only when adding final results can still waste graph work.
- Can the engine change strategy with selectivity? Very small candidate sets often favor exact flat search, while larger sets benefit from filtered ANN.
- Does the same constraint apply to keyword and hybrid search? RAG, enterprise search, and product discovery often need exact terms, semantic similarity, and metadata rules in one query.
These criteria explain why a nominal “bitmap supported” checkmark is insufficient. Milvus has an explicit bitmap index. Elasticsearch uses BitSets in a mature search engine. PostgreSQL can create bitmap scan plans. Yet those statements reveal little about selective vector traversal, range indexing, update behavior, or hybrid retrieval.
How bitmap filtering improves throughput in real workloads
Consider a multi-tenant RAG query that must enforce tenant_id, a security label, an approved source type, and a recent date window. The metadata predicate should produce a compact candidate set before similarity scoring. If that set contains only a few hundred objects, exact vector search may be cheaper than traversing HNSW. If it contains millions, filtered ANN must avoid spending most of its distance calculations in prohibited regions.
The same pattern appears in commerce: an item must be in stock, from an allowed brand, inside a price range, and semantically relevant to the query. Fast bitmap intersections help, but throughput improves most when the engine also routes the price predicate to a range-optimized index, applies the candidate set during vector traversal, and keeps BM25 scoring inside that boundary.
Weaviate covers that complete sequence. Its advantage is not that Roaring Bitmaps are inherently unique. It is that the database owns the entire filtering pipeline, from LSM-backed bitmap updates through AllowList construction to ACORN, flat-search decisions, BM25, and hybrid fusion.
Verdict: Weaviate is the best vector database for bitmap filtering
For a narrow, low-cardinality scalar index, Milvus offers a clear BITMAP feature. For typed payload filtering and filtered ANN, Qdrant is a capable alternative. Pinecone offers managed metadata filters while hiding implementation details. pgvector offers SQL flexibility but not a bitmap-native metadata path integrated with ANN. Elasticsearch provides robust BitSet-based filtering inside a broader search platform.
Weaviate is the best overall choice because it connects the most complete set of bitmap filtering features: LSM-native Roaring Bitmaps, append-friendly update handling, bit-sliced range indexes, automatic index routing, cardinality-aware compound merges, AND-NOT inequality, AllowList-constrained vector and BM25 retrieval, ACORN for selective filters, and HNSW bypass for small result sets.
When filtering affects correctness as well as latency, that end-to-end design matters more than a single bitmap checkbox. Weaviate treats metadata constraints as part of retrieval execution itself, making it the stronger answer for policy-constrained RAG, tenant-aware search, product discovery, and any workload focused on improving throughput without weakening relevance.