{"record":{"id":"42a289fa7736acb8","repo":"apache/beam","slug":"search-limit-must-be-positive-got-self-limit","errorCode":null,"errorMessage":"Search limit must be positive, got {self.limit}","messagePattern":"Search limit must be positive, got (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"sdks/python/apache_beam/ml/rag/enrichment/milvus_search.py","lineNumber":139,"sourceCode":"    search_params: Additional search parameters specific to the search type.\n      Example: {\"metric_type\": VectorSearchMetrics.EUCLIDEAN_DISTANCE}.\n    consistency_level: Consistency level for read operations.\n      Options: \"Strong\", \"Session\", \"Bounded\", \"Eventually\". Defaults to\n      \"Bounded\" if not specified when creating the collection.\n  \"\"\"\n  anns_field: str\n  limit: int = 3\n  filter: str = field(default_factory=str)\n  search_params: dict[str, Any] = field(default_factory=dict)\n  consistency_level: Optional[str] = None\n\n  def __post_init__(self):\n    if not self.anns_field:\n      raise ValueError(\n          \"Approximate Nearest Neighbor Search (ANNS) field must be provided\")\n\n    if self.limit <= 0:\n      raise ValueError(f\"Search limit must be positive, got {self.limit}\")\n\n\n@dataclass\nclass VectorSearchParameters(BaseSearchParameters):\n  \"\"\"Parameters for vector similarity search operations.\n\n  Inherits all parameters from BaseSearchParameters with the same semantics.\n  The anns_field should contain dense vector embeddings for this search type.\n\n  Args:\n    kwargs: Optional keyword arguments for additional vector search parameters.\n      Enables forward compatibility.\n\n  Note:\n    For inherited parameters documentation, see BaseSearchParameters.\n  \"\"\"\n  kwargs: dict[str, Any] = field(default_factory=dict)\n","sourceCodeStart":121,"sourceCodeEnd":157,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/python/apache_beam/ml/rag/enrichment/milvus_search.py#L121-L157","documentation":"MilvusSearchParameters.__post_init__ requires a strictly positive `limit` (number of neighbors to return). A zero or negative limit is invalid for Milvus search and raises ValueError including the offending value.","triggerScenarios":"MilvusSearchParameters(..., limit=0) or a negative value coming from a misparsed config file, CLI arg, or a computed limit like `page_size * page` evaluated at page 0.","commonSituations":"Pagination math bugs; config defaults of 0 meaning 'unset'; YAML/JSON configs where limit was left blank and coerced to 0.","solutions":["Set limit to a positive integer, e.g. limit=10.","Clamp parsed values: limit = max(1, parsed_limit).","Fix pagination formulas that produce 0 on the first page.","Validate user-supplied limit before constructing the parameters object."],"exampleFix":"// before\nparams = MilvusSearchParameters(anns_field='embedding', limit=0)\n// after\nparams = MilvusSearchParameters(anns_field='embedding', limit=10)","handlingStrategy":"validation","validationCode":"limit = int(raw_limit)\nif limit <= 0:\n    raise ValueError(f'limit must be >= 1, got {limit}')","typeGuard":null,"tryCatchPattern":"try:\n    search_params = MilvusSearchParameters(anns_field='embedding', limit=cfg.limit)\nexcept ValueError as e:\n    logging.warning('Falling back to default limit: %s', e)\n    search_params = MilvusSearchParameters(anns_field='embedding', limit=10)","preventionTips":["Clamp parsed limits with max(1, value).","Treat 0 in configs as 'use default', not as literal 0.","Add bounds validation at config load time."],"tags":["python","milvus","rag","validation"],"backgroundTag":"value-out-of-range","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"}