Assemble a C++ ``_MultiQuery`` from per-route ``_SearchQuery`` objects.
(
self, ctx: QueryContext, queries: list[_SearchQuery]
)
| 164 | return [convert_to_py_doc(doc, self._schema) for doc in docs] |
| 165 | |
| 166 | def _build_multi_query( |
| 167 | self, ctx: QueryContext, queries: list[_SearchQuery] |
| 168 | ) -> _MultiQuery: |
| 169 | """Assemble a C++ ``_MultiQuery`` from per-route ``_SearchQuery`` objects.""" |
| 170 | multi_query = _MultiQuery() |
| 171 | multi_query.queries = [_SubQuery.from_search_query(query) for query in queries] |
| 172 | # num_candidates controls per-sub-query candidate count for reranking pool. |
| 173 | # It must NOT be limited to the final output topk; use at least the C++ |
| 174 | # SubQuery default of 10 to ensure sufficient candidates for reranking. |
| 175 | _DEFAULT_NUM_CANDIDATES = 10 |
| 176 | for sub in multi_query.queries: |
| 177 | sub.num_candidates = max(ctx.topk, _DEFAULT_NUM_CANDIDATES) |
| 178 | multi_query.topk = ctx.topk |
| 179 | if ctx.filter: |
| 180 | multi_query.filter = ctx.filter |
| 181 | multi_query.include_vector = ctx.include_vector |
| 182 | if ctx.output_fields is not None: |
| 183 | multi_query.output_fields = ctx.output_fields |
| 184 | # Set rerank strategy via the C++ variant-based API. |
| 185 | reranker = ctx.reranker |
| 186 | if isinstance(reranker, RrfReRanker): |
| 187 | multi_query.set_rerank_rrf(reranker.rank_constant) |
| 188 | elif isinstance(reranker, WeightedReRanker): |
| 189 | multi_query.set_rerank_weighted(reranker.weights) |
| 190 | elif isinstance(reranker, CallbackReRanker): |
| 191 | multi_query.set_rerank_callback(reranker._callback) |
| 192 | return multi_query |
| 193 | |
| 194 | def _execute_python_pipeline( |
| 195 | self, vectors: list[_SearchQuery], collection: _Collection |
no outgoing calls
no test coverage detected