From 0e874a34893c728fc9e142e714b552d84b1b85a1 Mon Sep 17 00:00:00 2001 From: Richie Cahill Date: Fri, 12 Jun 2026 13:34:59 -0400 Subject: [PATCH] improved queary for vector search --- python/ebook_search/search.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/python/ebook_search/search.py b/python/ebook_search/search.py index e25c17d..5c179db 100644 --- a/python/ebook_search/search.py +++ b/python/ebook_search/search.py @@ -93,13 +93,14 @@ def search_ebooks( logger.info("ebook_search_start query_length=%s rerank=%s", len(query), rerank) timings: list[RuntimeStep] = [] - retrieval_query, timing = timed_result("Query preparation", retrieval_query_from_text, query) + bm25_query, timing = timed_result("BM25 query preparation", retrieval_query_from_text, query) timings.append(timing) retrieval, timing = timed_result( "Hybrid retrieval", parallel_retrieval, engine, - retrieval_query, + query, + bm25_query, config, ) timings.extend(retrieval.timings) @@ -130,7 +131,12 @@ def search_ebooks( return response -def parallel_retrieval(engine: Engine, query: str, config: EbookSearchConfig) -> RetrievalResponse: +def parallel_retrieval( + engine: Engine, + vector_query: str, + bm25_query: str, + config: EbookSearchConfig, +) -> RetrievalResponse: """Run vector and BM25 candidate retrieval concurrently with separate database sessions.""" with ThreadPoolExecutor(max_workers=2, thread_name_prefix="ebook-search") as executor: vector_future = executor.submit( @@ -138,14 +144,14 @@ def parallel_retrieval(engine: Engine, query: str, config: EbookSearchConfig) -> "Embedding + vector search", vector_candidates, engine, - query, + vector_query, config, ) bm25_future = executor.submit( timed_result, "BM25 search", bm25_candidates, - query, + bm25_query, config, ) vector_results, vector_timing = vector_future.result() @@ -196,7 +202,7 @@ def apply_rerank( def vector_candidates(engine: Engine, query: str, config: EbookSearchConfig) -> list[SearchResult]: - """Return pgvector cosine candidates for a normalized query.""" + """Return pgvector cosine candidates for a natural-language query.""" with Session(engine) as session: model = session.scalar(select(EbookEmbeddingModel).where(EbookEmbeddingModel.name == config.embedding_model)) if model is None: