elasticsearch_dsl/search/queries/term_level/
ids_query.rs1use crate::search::*;
2use crate::util::*;
3use crate::Set;
4
5#[derive(Debug, Clone, PartialEq, Serialize)]
18#[serde(remote = "Self")]
19pub struct IdsQuery {
20 #[serde(skip_serializing_if = "ShouldSkip::should_skip")]
21 values: Set<String>,
22
23 #[serde(skip_serializing_if = "ShouldSkip::should_skip")]
24 boost: Option<f32>,
25
26 #[serde(skip_serializing_if = "ShouldSkip::should_skip")]
27 _name: Option<String>,
28}
29
30impl Query {
31 pub fn ids<I>(values: I) -> IdsQuery
36 where
37 I: IntoIterator,
38 I::Item: ToString,
39 {
40 IdsQuery {
41 values: values.into_iter().map(|value| value.to_string()).collect(),
42 boost: None,
43 _name: None,
44 }
45 }
46}
47
48impl IdsQuery {
49 add_boost_and_name!();
50}
51
52impl ShouldSkip for IdsQuery {
53 fn should_skip(&self) -> bool {
54 self.values.should_skip()
55 }
56}
57
58serialize_with_root!("ids": IdsQuery);
59
60#[cfg(test)]
61mod tests {
62 use super::*;
63
64 #[test]
65 fn serialization() {
66 assert_serialize_query(
67 Query::ids(vec![1, 3, 2, 5, 4, 6]),
68 json!({
69 "ids": {
70 "values": ["1", "2", "3", "4", "5", "6"],
71 }
72 }),
73 );
74
75 assert_serialize_query(
76 Query::ids(vec![1, 3, 2, 5, 4, 6]).boost(1.3).name("test"),
77 json!({
78 "ids": {
79 "values": ["1", "2", "3", "4", "5", "6"],
80 "boost": 1.3,
81 "_name": "test"
82 }
83 }),
84 );
85 }
86}