vibe.review.retrieval.search

Document part search using the unified hybrid search abstraction.

Thin wrapper around HybridSearcher with DocumentPartStrategy, providing a requirement-focused interface.

DocumentSearcher

Search document parts for a requirement.

Uses hybrid BM25 + embedding similarity search with RRF combination.

Usage

searcher = DocumentSearcher(session) results = searcher.search(requirement, document_id, limit=50)

__init__

__init__(session: Session, embedding_provider: EmbeddingProvider | None = None, rrf_k: int = 60) -> None

Initialize the searcher.

Parameters:
  • session (Session) –

    SQLAlchemy session.

  • embedding_provider (EmbeddingProvider | None, default: None ) –

    Provider for query embeddings.

  • rrf_k (int, default: 60 ) –

    RRF constant (default 60).

search

search(requirement: Requirement, document_id: int, limit: int = 50, bm25_weight: float | None = None, embedding_weight: float | None = None, language: str | None = None) -> list[DocumentSearchResult]

Find document parts relevant to a requirement.

Parameters:
  • requirement (Requirement) –

    The requirement to search for.

  • document_id (int) –

    ID of the document to search.

  • limit (int, default: 50 ) –

    Maximum results to return.

  • bm25_weight (float | None, default: None ) –

    Weight for BM25 in RRF.

  • embedding_weight (float | None, default: None ) –

    Weight for embedding in RRF.

  • language (str | None, default: None ) –

    Language for text search.

Returns:
  • list[DocumentSearchResult]

    List of SearchResult sorted by relevance.

get_bm25_weight

get_bm25_weight() -> float

Get BM25 weight from config.yml review section.

Returns:
  • float

    BM25 weight (0.0 to 1.0), defaults to 0.5