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

  1. Set limit to a positive integer, e.g. limit=10.
  2. Clamp parsed values: limit = max(1, parsed_limit).
  3. Fix pagination formulas that produce 0 on the first page.
  4. 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

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


AI-assisted analysis of apache/beam@12126d8942 (2026-09-13). Data as JSON: /api/errors/42a289fa7736acb8. Report an issue: GitHub.