Hybrid Search¶
Hybrid search in Quiver combines vector similarity search with metadata filtering to provide more precise and contextual search results.
Overview¶
Hybrid search allows you to:
- Perform vector similarity search
- Filter results based on metadata
- Combine multiple search criteria
- Optimize search performance
How It Works¶
- Vector similarity search is performed first
- Results are filtered based on metadata criteria
- Final results are ranked and returned
Basic Usage¶
Simple Hybrid Search¶
// Perform a hybrid search with metadata filter
results, err := idx.SearchWithFilter(
queryVector, // Your query vector
10, // Number of results
"SELECT * FROM metadata WHERE json->>'category' = 'electronics'"
)
Advanced Filtering¶
// Complex metadata query
query := `
SELECT * FROM metadata
WHERE json->>'price'::float < 1000
AND json->>'category' = 'electronics'
AND json->>'in_stock'::boolean = true
`
results, err := idx.SearchWithFilter(queryVector, 10, query)
Faceted Search¶
Quiver supports faceted search through metadata:
// Search with facets
facets := map[string]string{
"category": "electronics",
"brand": "example"
}
results, err := idx.FacetedSearch(queryVector, 10, facets)
Performance Optimization¶
Index Optimization¶
- Use appropriate HNSW parameters
- Configure metadata indexing
- Optimize batch sizes
Query Optimization¶
- Write efficient metadata queries
- Use appropriate filters
- Balance precision and recall
Best Practices¶
- Metadata Structure
- Design metadata schema carefully
- Use consistent data types
-
Index frequently queried fields
-
Query Design
- Start with broad filters
- Refine based on results
-
Monitor query performance
-
Result Handling
- Implement pagination
- Cache frequent queries
- Handle edge cases
Examples¶
E-commerce Search¶
// Search for similar products within price range
query := `
SELECT * FROM metadata
WHERE json->>'price'::float BETWEEN 100 AND 500
AND json->>'category' = 'electronics'
`
results, err := idx.SearchWithFilter(
productVector,
20, // top 20 results
query
)
Content Recommendation¶
// Find similar content with specific tags
query := `
SELECT * FROM metadata
WHERE json->>'content_type' = 'article'
AND json->>'tags' LIKE '%technology%'
`
results, err := idx.SearchWithFilter(
contentVector,
5, // top 5 results
query
)
Advanced Features¶
Negative Examples¶
// Search with positive and negative examples
results, err := idx.SearchWithNegatives(
positiveVector,
[][]float32{negativeVector1, negativeVector2},
10, // k results
1, // page
10, // page size
)
Multi-Vector Search¶
// Search with multiple query vectors
results, err := idx.MultiVectorSearch(
[][]float32{vector1, vector2},
10, // k results per query
)
Error Handling¶
results, err := idx.SearchWithFilter(queryVector, 10, query)
if err != nil {
switch {
case errors.Is(err, ErrInvalidQuery):
// Handle invalid query
case errors.Is(err, ErrNoResults):
// Handle no results
default:
// Handle other errors
}
}
Next Steps¶
- Learn about Vector Search
- Explore Metadata Filtering
- Understand Performance Tuning