risingwavelabs/risingwave · error
LogicalVectorSearch can only for batch plan, not stream plan
Error message
LogicalVectorSearch can only for batch plan, not stream plan
What it means
Raised in LogicalVectorSearch::logical_rewrite_for_stream: a vector search node appeared in a streaming plan rewrite path, but vector search is only supported in batch queries, so the stream conversion fails with this error.
Solutions
- Use this plan node only in batch queries; build a streaming plan without LogicalVectorSearch, or extend the optimizer to support stream generation.
- Route vector search workloads through batch query paths.
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at src/frontend/src/optimizer/plan_node/logical_vector_search.rs:269 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/3472d879d90b3a7a.
Report an issue: GitHub.
Appendix: source
Thrown at src/frontend/src/optimizer/plan_node/logical_vector_search.rs:269
}
}
impl PredicatePushdown for LogicalVectorSearch {
fn predicate_pushdown(
&self,
predicate: Condition,
ctx: &mut PredicatePushdownContext,
) -> PlanRef {
gen_filter_and_pushdown(self, predicate, Condition::true_cond(), ctx)
}
}
impl ToStream for LogicalVectorSearch {
fn logical_rewrite_for_stream(
&self,
_ctx: &mut RewriteStreamContext,
) -> crate::error::Result<(PlanRef, ColIndexMapping)> {
bail!("LogicalVectorSearch can only for batch plan, not stream plan");
}
fn to_stream(&self, _ctx: &mut ToStreamContext) -> crate::error::Result<StreamPlanRef> {
bail!("LogicalVectorSearch can only for batch plan, not stream plan");
}
}
impl LogicalVectorSearch {
pub fn to_top_n(
input: PlanRef,
left: ExprImpl,
right: ExprImpl,
distance_type: PbDistanceType,
top_n: u64,
output_indices: &[usize],
) -> LogicalTopN {
let (neg, expr_type) = match distance_type {
PbDistanceType::Unspecified => {View on GitHub (pinned to 6469eb736d)