{"record":{"id":"9fa22404de477d00","repo":"apache/beam","slug":"vector-and-keyword-search-parameters-must-be-provided-for","errorCode":null,"errorMessage":"Vector and keyword search parameters must be provided for hybrid search","messagePattern":"Vector and keyword search parameters must be provided for hybrid search","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"sdks/python/apache_beam/ml/rag/enrichment/milvus_search.py","lineNumber":199,"sourceCode":"  Args:\n    vector: Parameters for the vector search component.\n    keyword: Parameters for the keyword search component.\n    ranker: Ranker for combining vector and keyword search results.\n      Example: RRFRanker(k=100).\n    limit: Maximum number of results to return per query. Defaults to 3 search\n      results.\n    kwargs: Optional keyword arguments for additional hybrid search parameters.\n      Enables forward compatibility.\n  \"\"\"\n  vector: VectorSearchParameters\n  keyword: KeywordSearchParameters\n  ranker: MilvusBaseRanker\n  limit: int = 3\n  kwargs: dict[str, Any] = field(default_factory=dict)\n\n  def __post_init__(self):\n    if not self.vector or not self.keyword:\n      raise ValueError(\n          \"Vector and keyword search parameters must be provided for \"\n          \"hybrid search\")\n\n    if not self.ranker:\n      raise ValueError(\"Ranker must be provided for hybrid search\")\n\n    if self.limit <= 0:\n      raise ValueError(f\"Search limit must be positive, got {self.limit}\")\n\n\nSearchStrategyType = Union[VectorSearchParameters,\n                           KeywordSearchParameters,\n                           HybridSearchParameters]\n\n\n@dataclass\nclass MilvusSearchParameters:\n  \"\"\"Parameters configuring Milvus search operations.","sourceCodeStart":181,"sourceCodeEnd":217,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/python/apache_beam/ml/rag/enrichment/milvus_search.py#L181-L217","documentation":"HybridSearchParameters combines a vector search strategy and a keyword (sparse/BM25) search strategy; hybrid search in Milvus requires both. __post_init__ raises ValueError if either `vector` or `keyword` is missing/None.","triggerScenarios":"Constructing HybridSearchParameters(vector=VectorSearchParameters(...)) without `keyword`, or vice versa, when configuring hybrid retrieval in a RAG pipeline.","commonSituations":"Gradually migrating from pure vector search to hybrid and only setting half the fields; assuming keyword defaults exist (it has no default provider).","solutions":["Pass both `vector=VectorSearchParameters(...)` and `keyword=KeywordSearchParameters(...)`.","If you only need one mode, use VectorSearchParameters or KeywordSearchParameters directly instead of HybridSearchParameters.","Validate the search config before constructing HybridSearchParameters."],"exampleFix":"// before\nparams = HybridSearchParameters(vector=VectorSearchParameters(...), ranker=RRFRanker())\n// after\nparams = HybridSearchParameters(\n    vector=VectorSearchParameters(...),\n    keyword=KeywordSearchParameters(...),\n    ranker=RRFRanker())","handlingStrategy":"validation","validationCode":"if mode == 'hybrid' and not (cfg.get('vector') and cfg.get('keyword')):\n    raise ValueError('hybrid search requires both vector and keyword params')","typeGuard":null,"tryCatchPattern":"try:\n    params = HybridSearchParameters(**cfg)\nexcept ValueError as e:\n    if 'Vector and keyword' in str(e):\n        logging.error('Incomplete hybrid search config: %s', e)\n    raise","preventionTips":["Provide both vector and keyword strategies together for hybrid mode.","Use plain VectorSearchParameters/KeywordSearchParameters for single-mode retrieval.","Validate the full retrieval config in tests."],"tags":["python","milvus","rag","hybrid-search","config"],"backgroundTag":"missing-required-argument","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}