Skip to content

Commit bf44bef

Browse files
Darkheirrdettai-sk
authored andcommitted
feat: String as sort in elasticsearch endpoints (quickwit-oss#6108)
Signed-off-by: Darkheir <raphael.cohen@sekoia.io>
1 parent 3e0670a commit bf44bef

1 file changed

Lines changed: 25 additions & 1 deletion

File tree

quickwit/quickwit-serve/src/elasticsearch_api/model/search_body.rs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,17 @@ impl<'de> Visitor<'de> for FieldSortVecVisitor {
134134
type Value = Vec<SortField>;
135135

136136
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
137-
formatter.write_str("An array containing the sort fields.")
137+
formatter.write_str("A string, array, or object containing the sort fields.")
138+
}
139+
140+
fn visit_str<E>(self, field_name: &str) -> Result<Vec<SortField>, E>
141+
where E: serde::de::Error {
142+
let order = default_elasticsearch_sort_order(field_name);
143+
Ok(vec![SortField {
144+
field: field_name.to_string(),
145+
order,
146+
date_format: None,
147+
}])
138148
}
139149

140150
fn visit_seq<A>(self, mut seq: A) -> Result<Vec<SortField>, A::Error>
@@ -231,6 +241,20 @@ mod tests {
231241
assert_eq!(field_sorts[1].order, SortOrder::Asc);
232242
}
233243

244+
#[test]
245+
fn test_sort_field_str() {
246+
let json = r#"
247+
{
248+
"sort": "timestamp"
249+
}
250+
"#;
251+
let search_body: SearchBody = serde_json::from_str(json).unwrap();
252+
let field_sorts = search_body.sort.unwrap();
253+
assert_eq!(field_sorts.len(), 1);
254+
assert_eq!(field_sorts[0].field, "timestamp");
255+
assert_eq!(field_sorts[0].order, SortOrder::Asc);
256+
}
257+
234258
#[test]
235259
fn test_sort_default_orders() {
236260
let json = r#"

0 commit comments

Comments
 (0)