配置 SSOT(TOML + .env) 统一错误契约 Auth 与事务边界 Redis / Celery 可靠性:业务 Redis(DB/0)与 Celery broker/backend(DB/1)显式拆分;连接池、sync client 可观测性(OpenTelemetry + LGTM)
1.8 KiB
1.8 KiB
title, impact, impactDescription, tags, description, alwaysApply
| title | impact | impactDescription | tags | description | alwaysApply |
|---|---|---|---|---|---|
| Use Hybrid Search for Better Results | MEDIUM | Combining vector + filters improves relevance and reduces search space | vector, hybrid, filters, redisvl, search | Use Hybrid Search for Better Results | true |
Use Hybrid Search for Better Results
Combine vector similarity with attribute filtering for more relevant results. In this rule, "hybrid" means filtered vector search. Redis and RedisVL also use "hybrid search" for text + vector fusion via FT.HYBRID / HybridQuery.
Correct: Apply filters to reduce search space.
from redisvl.query import VectorQuery
from redisvl.query.filter import Num, Tag
filters = (Tag("category") == "technology") & (Num("date") >= 2024) & (Num("date") <= 2025)
query = VectorQuery(
vector=query_embedding,
vector_field_name="embedding",
return_fields=["content", "category", "date"],
num_results=10,
filter_expression=filters
)
results = index.query(query)
Incorrect: Searching entire vector space when filters apply.
# Bad: No filter - searches all vectors then filters client-side
results = index.query(VectorQuery(
vector=query_embedding,
vector_field_name="embedding",
num_results=1000
))
# Client-side filtering - wasteful
filtered = [r for r in results if r["category"] == "technology"]
Tips:
- Use TAG fields for category filters
- Use NUMERIC fields for date/price ranges
- Redis auto-selects the filtered vector execution strategy; tune
hybrid_policyonly when needed - For true text + vector fusion, use
HybridQueryon Redis >= 8.4.0 with redis-py >= 7.1.0; useAggregateHybridQueryon earlier Redis versions
Reference: Redis Vector Search