6fe5596c13
Replace custom keyword/fuzzy search algorithms with industry-standard BM25 sparse vectors, combined with dense semantic vectors using Qdrant's native Reciprocal Rank Fusion (RRF). This consolidates search architecture and improves relevance for both semantic and keyword queries. Key changes: - Add fastembed dependency for BM25 sparse vector generation - Update Qdrant collection schema to support named vectors (dense + sparse) - Create BM25SparseEmbeddingProvider using FastEmbed's Qdrant/bm25 model - Implement BM25HybridSearchAlgorithm with native Qdrant RRF prefetch - Update document processor to generate both dense and sparse embeddings - Simplify nc_semantic_search() tool to use BM25 hybrid only - Remove legacy keyword.py, fuzzy.py, and custom hybrid.py (736 lines) - Update ADR-014 with implementation notes and test results Benefits: - Consolidated architecture (single Qdrant database) - Native database-level RRF fusion (more efficient) - Industry-standard BM25 (replaces brittle custom keyword search) - Better relevance across semantic and keyword queries - Simplified codebase (-285 net lines) Tests: All 125 tests passing (118 unit, 7 integration) Implements ADR-014: Replace Custom Keyword Search with BM25 Hybrid Search 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
14 lines
412 B
Python
14 lines
412 B
Python
"""Embedding service package for generating vector embeddings."""
|
|
|
|
from .bm25_provider import BM25SparseEmbeddingProvider
|
|
from .service import EmbeddingService, get_bm25_service, get_embedding_service
|
|
from .simple_provider import SimpleEmbeddingProvider
|
|
|
|
__all__ = [
|
|
"EmbeddingService",
|
|
"get_embedding_service",
|
|
"BM25SparseEmbeddingProvider",
|
|
"get_bm25_service",
|
|
"SimpleEmbeddingProvider",
|
|
]
|