RediSearch
RepositoryFreeA query and indexing engine for Redis, providing secondary indexing, full-text search, vector similarity search and aggregations.
Capabilities14 decomposed
full-text search with boolean operators and phrase matching
Medium confidenceImplements full-text search via inverted index structures that map tokenized terms to document IDs, supporting boolean operators (AND, OR, NOT), phrase matching with proximity constraints, and fuzzy matching via edit distance. The indexing pipeline tokenizes text fields during document ingestion and maintains a trie-based term dictionary for efficient prefix and wildcard queries. Query parsing converts user input into a query node tree (src/query_node.h) that is executed against the inverted index to return ranked results.
Uses a trie-based term dictionary with incremental indexing via Redis keyspace notifications (src/redis_index.c), enabling real-time index updates without batch reindexing, unlike traditional search engines that require explicit commit/refresh cycles
Faster than Elasticsearch for sub-million-document workloads because it avoids network round-trips and leverages Redis' in-memory architecture; simpler operational model than Solr with no separate JVM process
vector similarity search with multiple indexing algorithms
Medium confidenceImplements vector similarity search by supporting multiple approximate nearest neighbor (ANN) algorithms: FLAT (brute-force), HNSW (Hierarchical Navigable Small World), and SVS (Streaming Vector Search). Vectors are indexed as VECTOR field types during document ingestion and stored in specialized index structures. Query execution performs similarity search using cosine, L2, or inner product distance metrics, returning top-k nearest neighbors ranked by distance. The module integrates with Redis' native data types, storing vectors as binary blobs in hashes or JSON documents.
Supports three distinct ANN algorithms (FLAT, HNSW, SVS) selectable per index, with HNSW using hierarchical graph structure for logarithmic query complexity; integrates vector search directly into Redis' command protocol via FT.SEARCH with VECTOR clause, eliminating separate vector DB round-trips
Faster than Pinecone/Weaviate for sub-million-vector workloads because vectors live in the same Redis instance as source data, eliminating network latency; more operationally simple than Milvus because it's a single Redis module with no separate infrastructure
concurrent query execution with thread-safe locking
Medium confidenceImplements thread-safe concurrent query execution using reader-writer locks and atomic operations. Multiple queries can execute concurrently on the same index (read-only operations), while index modifications (document addition/deletion) acquire write locks to prevent concurrent modification. The module uses Redis' threading model and integrates with Redis' event loop for non-blocking execution. Garbage collection (src/spec.c) runs asynchronously to clean up deleted documents without blocking queries.
Uses reader-writer locks to allow concurrent read-only queries while serializing write operations, integrated with Redis' event loop for non-blocking execution; garbage collection runs asynchronously to avoid blocking queries during cleanup
More efficient than global locking because read-only queries don't block each other; simpler than optimistic locking because Redis' single-threaded event loop simplifies synchronization
persistence and replication of indexes
Medium confidenceIntegrates with Redis' persistence and replication mechanisms to ensure indexes survive server restarts and are replicated to replica nodes. Index structures are serialized during RDB snapshots and deserialized on startup. For replication, index modifications are propagated to replicas via Redis' replication stream, ensuring replicas maintain consistent indexes. The module registers custom Redis types (IndexSpecType, InvertedIndexType) to enable proper serialization/deserialization.
Registers custom Redis types (IndexSpecType, InvertedIndexType) for proper serialization in RDB snapshots; integrates with Redis' replication stream to propagate index modifications to replicas without explicit replication logic
Simpler than external backup systems because indexes are included in Redis' native RDB snapshots; more reliable than application-level index rebuilding because replication ensures replicas have consistent indexes
scoring and ranking with bm25 and custom weights
Medium confidenceImplements relevance scoring using BM25 algorithm (Okapi BM25) for full-text search results, with configurable parameters (k1, b) for tuning. Field-level weights can be specified at index creation time to boost relevance of certain fields (e.g., title weighted higher than description). Results are ranked by BM25 score, with ties broken by document ID. The scoring system integrates with query execution to compute scores during result collection.
Implements BM25 scoring with field-level weights specified at index creation, enabling domain-specific relevance tuning without custom scoring logic; integrates scoring into query execution to compute scores during result collection rather than post-processing
More efficient than Elasticsearch's custom scoring because BM25 is computed in-process without script execution; simpler than learning Elasticsearch's scoring DSL because field weights are declarative
tokenization and stemming for text field processing
Medium confidenceImplements text processing pipeline for TEXT fields including tokenization (splitting text into terms), lowercasing, stopword removal, and stemming (reducing words to root form). Tokenization rules are specified at field creation time and applied during document indexing. The module supports multiple stemming algorithms (Porter stemmer) and configurable stopword lists. Tokenized terms are stored in the inverted index for efficient full-text search.
Applies tokenization and stemming during document indexing (not at query time), enabling efficient full-text search without per-query processing; supports configurable stemming algorithms and stopword lists at field creation time
More efficient than query-time stemming because terms are pre-processed during indexing; simpler than Elasticsearch's analyzer chains because tokenization rules are declarative
numeric range queries and aggregations
Medium confidenceImplements numeric range queries using a numeric range tree data structure (src/spec.h) that indexes NUMERIC field types for efficient range filtering. Queries specify min/max bounds and return documents within the range. The module also supports numeric aggregations (SUM, AVG, MIN, MAX, COUNT) via the aggregation framework (src/aggregate/aggregate.h), which processes result sets through a pipeline of reduction operators. Numeric fields are indexed separately from text, enabling fast range scans without full-text index overhead.
Uses a specialized numeric range tree (not a B-tree or skip list) optimized for Redis' in-memory model, combined with aggregation pipeline that supports expression evaluation (src/result_processor.h) for computed fields during aggregation, enabling complex numeric transformations without post-processing
Faster than SQL databases for numeric range queries on indexed fields because the range tree is optimized for in-memory traversal; more flexible than simple hash-based filtering because it supports arbitrary range bounds without pre-computed buckets
geospatial and geometric queries
Medium confidenceImplements geospatial search via GEO field type for latitude/longitude-based queries and GEOMETRY field type for complex spatial shapes. GEO fields use geohashing to index points and support radius searches (e.g., 'find all restaurants within 5km'). GEOMETRY fields support polygon/linestring queries for more complex spatial relationships. Both field types are indexed separately and integrated into the query execution engine, allowing spatial filters to be combined with text and numeric filters in a single query.
Uses geohashing for GEO field indexing, enabling efficient radius searches without requiring separate geospatial indexes; GEOMETRY support via WKT parsing allows complex spatial queries without external GIS libraries, all integrated into the same query execution engine as text and numeric search
Simpler operational model than PostGIS because geospatial data lives in Redis without a separate database; faster than Elasticsearch geo queries for small-to-medium datasets because it avoids Elasticsearch's inverted index overhead for spatial data
aggregation pipeline with grouping, reduction, and expression evaluation
Medium confidenceImplements a multi-stage aggregation pipeline (src/aggregate/aggregate.h, src/aggregate/aggregate_exec.c) that processes query results through configurable stages: filtering, grouping, reduction (SUM/AVG/MIN/MAX/COUNT), sorting, and limiting. Each stage is a result processor that transforms data; stages are chained together in execution order. The pipeline supports expression evaluation (src/result_processor.h) for computed fields, allowing mathematical operations and field transformations during aggregation. Results are materialized in memory and returned as structured data.
Implements a composable pipeline architecture where each stage (filter, group, reduce, sort, limit) is a pluggable result processor (src/result_processor.c), enabling complex aggregations without writing custom code; expression evaluation system (src/rlookup.h, RLookup) supports field references and mathematical operations evaluated during pipeline execution
Faster than running aggregations in application code because computation happens in-process within Redis; more flexible than SQL GROUP BY because pipeline stages can be dynamically composed and expressions are evaluated at query time
index schema definition and field type management
Medium confidenceProvides a schema definition system (IndexSpec in src/spec.h) that allows developers to declare searchable fields with specific types (TEXT, NUMERIC, TAG, VECTOR, GEO, GEOMETRY) and indexing options. The FT.CREATE command parses schema definitions and creates index structures tailored to each field type. Field specifications include tokenization rules for TEXT (e.g., stemming, stopwords), distance metrics for VECTOR, and precision for NUMERIC. The module maintains a global specDict_g dictionary mapping index names to IndexSpec structures, enabling multi-index support.
Uses a declarative schema system (FT.CREATE) that maps to specialized index structures per field type, stored in specDict_g global dictionary; supports multiple independent indexes on the same Redis data without duplication, enabling different search patterns on identical source documents
More flexible than Elasticsearch's single-index-per-use-case model because multiple RediSearch indexes can coexist on the same data; simpler than MongoDB schema validation because RediSearch schema is optional and only affects searchable fields
incremental document indexing via keyspace notifications
Medium confidenceImplements real-time index updates by subscribing to Redis keyspace notifications (src/redis_index.c) for document changes (SET, DEL, HSET, etc.). When a document is modified, the module automatically detects the change and updates all relevant indexes without explicit reindexing commands. This is achieved through Redis' keyspace event subscription mechanism, which notifies the module of key modifications. The indexing pipeline (src/redis_index.c) processes these events and updates inverted indexes, numeric trees, vector indexes, and other index structures incrementally.
Leverages Redis' native keyspace notification mechanism to detect document changes and trigger incremental index updates without explicit reindexing commands; integrates directly into Redis' event loop, avoiding separate indexing services or batch jobs
Simpler than Elasticsearch's refresh interval model because updates are event-driven rather than time-based; more efficient than application-level index management because indexing happens within Redis without round-trips
query parsing and execution with query node tree
Medium confidenceImplements a two-stage query processing system: parsing (src/query.c) converts user query strings into a query node tree (src/query_node.h) representing the logical structure (AND, OR, NOT, phrase, range, etc.), and execution evaluates the tree against index structures to produce result sets. The query parser handles boolean operators, quoted phrases, range syntax, and field-specific queries. Query execution traverses the tree, performing set operations (intersection, union, complement) on document ID sets from different index types (inverted, numeric, vector, geo). Results are scored and ranked based on relevance metrics.
Uses a query node tree representation (src/query_node.h) that separates parsing from execution, enabling query optimization and reuse; execution engine performs set operations on document ID sets from different index types, allowing hybrid queries combining text, numeric, vector, and geo filters in a single query tree
More efficient than Elasticsearch for complex boolean queries because the query tree is optimized for in-memory set operations; supports field-specific queries without separate query DSL learning curve
distributed search across redis cluster nodes
Medium confidenceProvides distributed query execution for Redis Enterprise clusters (src/coord/dist_aggregate.c) by coordinating queries across multiple cluster nodes. When a query is executed on a cluster, the module distributes the query to relevant nodes (based on key distribution), collects partial results, and merges them on the coordinator node. Aggregations are also distributed: each node performs local aggregation, and the coordinator performs final aggregation on partial results. This enables searching across sharded data without application-level coordination.
Implements transparent distributed query execution via coordinator pattern (src/coord/dist_aggregate.c), where queries are automatically distributed to relevant cluster nodes and results are merged without application involvement; aggregations are two-stage (local + global) to minimize data movement
Simpler than Elasticsearch distributed search because cluster coordination is handled by Redis itself; more efficient than application-level sharding because the module understands index structure and can optimize query distribution
document table and field lookup with rlookup system
Medium confidenceMaintains a document table (src/spec.h) that stores document metadata and field values for all indexed documents. The RLookup system (src/rlookup.h, src/rlookup.c) provides efficient field lookup by document ID, enabling retrieval of field values during query execution and aggregation. RLookup supports lazy loading (fields are fetched from source documents on-demand) and caching (frequently accessed fields are cached in memory). This system enables efficient result construction without loading entire documents into memory.
Implements RLookup system with lazy-loading and caching to decouple index structures from document storage, enabling efficient field retrieval without materializing full documents; supports field projection at query time without pre-computing result sets
More memory-efficient than storing full documents in index because fields are fetched on-demand; faster than application-level field lookup because RLookup is optimized for batch field retrieval
Capabilities are decomposed by AI analysis. Each maps to specific user intents and improves with match feedback.
Related Artifactssharing capabilities
Artifacts that share capabilities with RediSearch, ranked by overlap. Discovered automatically through the match graph.
zvec
A lightweight, lightning-fast, in-process vector database
taladb
Local-first document and vector database for React, React Native, and Node.js
oceanbase
The Fastest Distributed Database for Transactional, Analytical, and AI Workloads.
infinity
The AI-native database built for LLM applications, providing incredibly fast hybrid search of dense vector, sparse vector, tensor (multi-vector), and full-text.
milvus
Embeded Milvus
SinglebaseCloud
AI-powered backend platform with Vector DB, DocumentDB, Auth, and more to speed up app development.
Best For
- ✓Teams building search-heavy applications on Redis infrastructure
- ✓Developers needing full-text search without Elasticsearch/Solr operational overhead
- ✓Applications with sub-second latency requirements on indexed text
- ✓RAG (Retrieval-Augmented Generation) pipelines needing fast semantic search
- ✓Recommendation engines with embedding-based similarity
- ✓Teams building AI/ML applications on Redis without separate vector DB
- ✓Applications requiring sub-100ms p99 latency on vector queries
- ✓High-concurrency search applications with many simultaneous queries
Known Limitations
- ⚠Inverted index is built incrementally; large bulk indexing may cause temporary memory spikes
- ⚠Phrase proximity queries have configurable slop but exact phrase matching is more efficient than proximity ranges
- ⚠Fuzzy search performance degrades with very large edit distance thresholds (>2 recommended)
- ⚠FLAT algorithm has O(n) query complexity; suitable only for <100k vectors
- ⚠HNSW memory overhead is ~2-3x the raw vector size due to graph structure; tunable via M and EF parameters
- ⚠Vector dimension must be fixed at index creation time; no dynamic resizing
Requirements
Input / Output
UnfragileRank
UnfragileRank is computed from adoption signals, documentation quality, ecosystem connectivity, match graph feedback, and freshness. No artifact can pay for a higher rank.
Repository Details
Last commit: Apr 22, 2026
About
A query and indexing engine for Redis, providing secondary indexing, full-text search, vector similarity search and aggregations.
Categories
Alternatives to RediSearch
Are you the builder of RediSearch?
Claim this artifact to get a verified badge, access match analytics, see which intents users search for, and manage your listing.
Get the weekly brief
New tools, rising stars, and what's actually worth your time. No spam.
Data Sources
Looking for something else?
Search →