{"record":{"id":"bd338fdce72046ca","repo":"quickwit-oss/quickwit","slug":"sort-by-more-than-2-fields-is-not-supported-yet","errorCode":null,"errorMessage":"Sort by more than 2 fields is not supported yet.","messagePattern":"Sort by more than 2 fields is not supported yet\\.","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"quickwit/quickwit-search/src/collector.rs","lineNumber":1031,"sourceCode":"        SortByComponent::DocId {\n            order: SortOrder::Desc,\n        }\n        .into()\n    } else if num_sort_fields == 1 {\n        let sort_field = &search_request.sort_fields[0];\n        let order = SortOrder::try_from(sort_field.sort_order).unwrap_or(SortOrder::Desc);\n        to_sort_by_component(&sort_field.field_name, order).into()\n    } else if num_sort_fields == 2 {\n        let sort_field1 = &search_request.sort_fields[0];\n        let order1 = SortOrder::try_from(sort_field1.sort_order).unwrap_or(SortOrder::Desc);\n        let sort_field2 = &search_request.sort_fields[1];\n        let order2 = SortOrder::try_from(sort_field2.sort_order).unwrap_or(SortOrder::Desc);\n        SortByPair {\n            first: to_sort_by_component(&sort_field1.field_name, order1),\n            second: Some(to_sort_by_component(&sort_field2.field_name, order2)),\n        }\n    } else {\n        panic!(\"Sort by more than 2 fields is not supported yet.\")\n    }\n}\n\n/// Builds the QuickwitCollector, in function of the information that was requested by the user.\npub(crate) fn make_collector_for_split(\n    split_id: SplitId,\n    search_request: &SearchRequest,\n    agg_context_params: AggContextParams,\n) -> crate::Result<QuickwitCollector> {\n    let aggregation = match &search_request.aggregation_request {\n        Some(aggregation) => Some(serde_json::from_str(aggregation)?),\n        None => None,\n    };\n    let sort_by = sort_by_from_request(search_request);\n    Ok(QuickwitCollector {\n        split_id,\n        start_offset: search_request.start_offset as usize,\n        max_hits: search_request.max_hits as usize,","sourceCodeStart":1013,"sourceCodeEnd":1049,"githubUrl":"https://github.com/quickwit-oss/quickwit/blob/a39730c5cdcd1a4fe798403737ae293999ea21f8/quickwit/quickwit-search/src/collector.rs#L1013-L1049","documentation":"The search collector's sort-building code supports sorting by at most two fields (SortByPair with a first and optional second component). When a query supplies a sort spec with three or more fields, the builder panics with this message instead of returning a user-facing error. It is a known limitation of the collector, not a malformed-request error.","triggerScenarios":"Issuing a search request (REST or ES-compat endpoint) whose `sort` array contains 3+ fields, reaching the else branch after sort_field1/sort_field2 handling.","commonSituations":"Porting Elasticsearch queries that sort on many fields; dashboards auto-generating multi-field sorts; users chaining tie-breaker sort keys.","solutions":["Reduce the query's sort list to at most 2 fields.","Return a proper InvalidQuery/validation error from the query parser instead of panicking, so users get a 4xx response.","Extend the collector to a Vec<SortBy> if multi-field sorting is genuinely needed."],"exampleFix":"// before\n} else {\n    panic!(\"Sort by more than 2 fields is not supported yet.\")\n}\n// after\n} else if sort_fields.len() > 2 {\n    return Err(anyhow!(\"Sort by more than 2 fields is not supported yet.\"));\n}","handlingStrategy":"validation","validationCode":"if sort_fields.len() > 2 {\n    return Err(invalid_query(\"Sort by more than 2 fields is not supported yet.\"));\n}","typeGuard":null,"tryCatchPattern":"// client-side: keep sort arrays to <=2 fields; server-side: return 400 via query validation, not panic.","preventionTips":["Validate sort field count in the query parser before collector construction.","Document the 2-sort-field limit in the search API docs.","Reject multi-field sorts early in ES-compat request translation with a 4xx error."],"tags":["panic","search","sorting","limitation"],"backgroundTag":"operation-not-supported","analyzedSha":"a39730c5cdcd1a4fe798403737ae293999ea21f8","analyzedAt":"2026-09-08T13:19:37.784Z","contentChangedAt":"2026-09-08T13:19:37.784Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}