Redis
Fast search indexing via Redis full-text capabilities.
Redis Search leverages the full-text search capabilities in Redis 8+ to provide distributed, high-performance search capabilities. This provider is recommended for larger deployments and environments where you're already using external services.
SEARCH_PROVIDER=redis
REDIS_URL=redis://username:password@redis.example.com:6379
REDIS_SEARCH_INDEX_NAME=storyden
SEARCH_INDEX_CHUNK_SIZE=1000Redis Search provides the same query capabilities as Bleve but stores indexes in Redis, making it suitable for distributed deployments with multiple Storyden replicas. It uses the same language-agnostic configuration for consistent cross-language search behavior.
Redis indexes content for fast term-based search. Storyden uses a language-agnostic configuration that works for many languages:
- All Latin-based languages (English, Spanish, French, German, Italian, Portuguese, Dutch, etc.)
- Slavic languages (Russian, Ukrainian, Polish, Czech, Slovak, Serbian, Croatian, Bulgarian)
- Greek, Turkish, Georgian, Armenian
- Hebrew, Arabic, Persian
- Urdu, Hindi, Punjab, Nepali
- Yoruba, Igbo, Hausa, Akan, Swahili
- Chinese, Japanese, Korean, Thai, Khmer, Burmese
Upsides:
- Fast and efficient search capabilities
- Allows the Storyden process to run and scale in ephemeral/stateless environments such as cloud/containers
Considerations:
- Requires an external service to be maintained
- Redis instance requires the
FTcommand family, either via Redis v8 or RediSearch module. - Large corpuses of data will require adequate amounts of memory
See the configuration reference for all available settings.
If you choose Redis as your search provider, you also may as well set it as your cache provider. The Redis URL via REDIS_URL is the same, see Cache configuration for more information.
Indexing
Storyden will automatically create the index if it does not exist. The index name is controlled by REDIS_SEARCH_INDEX_NAME.
In order to trigger a full re-index of content, see reindexing.
Redis indexes Storyden content at around 100x faster than Bleve. Our testing on a 12 core machine results in around 10 minutes for 1 million documents. This may be improved in future versions.
Examples
These are minimal examples for different deployment scenarios. These are not production-ready and purely for illustrative purposes.
Multi-instance Kubernetes deployment with Redis
Large-scale deployment with multiple replicas and external services. This configuration example is for a fully stateless Storyden instance (or instances) allowing you to deploy without any persistent disk storage.
# Database
DATABASE_URL=postgresql://user:pass@postgres.namespace.svc.cluster.local:5432/storyden
# Cache and search
CACHE_PROVIDER=redis
SEARCH_PROVIDER=redis
REDIS_URL=redis://redis.namespace.svc.cluster.local:6379
REDIS_SEARCH_INDEX_NAME=storyden-prod
# Re-indexing chunk size
SEARCH_INDEX_CHUNK_SIZE=2000
# Asset storage
ASSET_STORAGE_TYPE=s3
S3_ENDPOINT=s3.amazonaws.com
S3_BUCKET=storyden-assets-prod
S3_REGION=us-east-1
S3_ACCESS_KEY=<your-access-key>
S3_SECRET_KEY=<your-secret-key>Docker Compose with Redis
Development or small production setup using Docker Compose:
version: "3.8"
services:
storyden:
image: ghcr.io/southclaws/storyden:latest
environment:
DATABASE_URL: postgresql://storyden:password@db:5432/storyden
CACHE_PROVIDER: redis
SEARCH_PROVIDER: redis
REDIS_URL: redis://redis:6379
REDIS_SEARCH_INDEX_NAME: storyden
depends_on:
- db
- redis
volumes:
- assets:/data/assets
db:
image: postgres:latest
environment:
POSTGRES_DB: storyden
POSTGRES_USER: storyden
POSTGRES_PASSWORD: password
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:latest
volumes:
- redis_data:/data
volumes:
postgres_data:
redis_data:
assets: