Files
life-echo/api/.agents/skills/redis-development/rules/vector-hybrid-search.md

53 lines
1.8 KiB
Markdown
Raw Normal View History

---
title: Use Hybrid Search for Better Results
impact: MEDIUM
impactDescription: Combining vector + filters improves relevance and reduces search space
tags: vector, hybrid, filters, redisvl, search
description: Use Hybrid Search for Better Results
alwaysApply: 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.
```python
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.
```python
# 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_policy` only when needed
- For true text + vector fusion, use `HybridQuery` on Redis >= 8.4.0 with redis-py >= 7.1.0; use `AggregateHybridQuery` on earlier Redis versions
Reference: [Redis Vector Search](https://redis.io/docs/latest/develop/ai/search-and-query/vectors/)