apache/beam · error · ValueError
Search limit must be positive, got {self.limit}
Error message
Search limit must be positive, got {self.limit} What it means
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.
Source
Thrown at sdks/python/apache_beam/ml/rag/enrichment/milvus_search.py:139
search_params: Additional search parameters specific to the search type.
Example: {"metric_type": VectorSearchMetrics.EUCLIDEAN_DISTANCE}.
consistency_level: Consistency level for read operations.
Options: "Strong", "Session", "Bounded", "Eventually". Defaults to
"Bounded" if not specified when creating the collection.
"""
anns_field: str
limit: int = 3
filter: str = field(default_factory=str)
search_params: dict[str, Any] = field(default_factory=dict)
consistency_level: Optional[str] = None
def __post_init__(self):
if not self.anns_field:
raise ValueError(
"Approximate Nearest Neighbor Search (ANNS) field must be provided")
if self.limit <= 0:
raise ValueError(f"Search limit must be positive, got {self.limit}")
@dataclass
class VectorSearchParameters(BaseSearchParameters):
"""Parameters for vector similarity search operations.
Inherits all parameters from BaseSearchParameters with the same semantics.
The anns_field should contain dense vector embeddings for this search type.
Args:
kwargs: Optional keyword arguments for additional vector search parameters.
Enables forward compatibility.
Note:
For inherited parameters documentation, see BaseSearchParameters.
"""
kwargs: dict[str, Any] = field(default_factory=dict)
View on GitHub (pinned to 12126d8942)
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.
Example fix
// before params = MilvusSearchParameters(anns_field='embedding', limit=0) // after params = MilvusSearchParameters(anns_field='embedding', limit=10)
Defensive patterns
Strategy: validation
Validate before calling
limit = int(raw_limit)
if limit <= 0:
raise ValueError(f'limit must be >= 1, got {limit}') Try / catch
try:
search_params = MilvusSearchParameters(anns_field='embedding', limit=cfg.limit)
except ValueError as e:
logging.warning('Falling back to default limit: %s', e)
search_params = MilvusSearchParameters(anns_field='embedding', limit=10) Prevention
- 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.
When it happens
Trigger: 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.
Common situations: Pagination math bugs; config defaults of 0 meaning 'unset'; YAML/JSON configs where limit was left blank and coerced to 0.
Understand the failure class
Background: "value must be between 0 and 1" / "out of range" / "must not be negative" errors: fixing range-validation failures across open-source libraries — this error's family across 42 libraries.
Related errors
- Search strategy must be provided
- Expected image content in {type(item).__name__} {item.id}, g
- Approximate Nearest Neighbor Search (ANNS) field must be pro
- Vector and keyword search parameters must be provided for hy
- Ranker must be provided for hybrid search
AI-assisted analysis of apache/beam@12126d8942 (2026-09-13).
Data as JSON: /api/errors/42a289fa7736acb8.
Report an issue: GitHub.