|
12 | 12 | // See the License for the specific language governing permissions and |
13 | 13 | // limitations under the License. |
14 | 14 |
|
| 15 | +use std::collections::{BTreeSet, HashMap}; |
| 16 | + |
15 | 17 | use serde::Deserialize; |
16 | 18 |
|
17 | | -use crate::elastic_query_dsl::bool_query::BoolQuery; |
18 | 19 | use crate::elastic_query_dsl::one_field_map::OneFieldMap; |
19 | | -use crate::elastic_query_dsl::term_query::term_query_from_field_value; |
20 | 20 | use crate::elastic_query_dsl::{ConvertibleToQueryAst, ElasticQueryDslInner}; |
21 | 21 | use crate::not_nan_f32::NotNaNf32; |
22 | | -use crate::query_ast::QueryAst; |
| 22 | +use crate::query_ast::{QueryAst, TermSetQuery}; |
23 | 23 |
|
24 | 24 | #[derive(PartialEq, Eq, Debug, Deserialize, Clone)] |
25 | 25 | #[serde(try_from = "TermsQueryForSerialization")] |
@@ -87,15 +87,14 @@ impl TryFrom<TermsQueryForSerialization> for TermsQuery { |
87 | 87 |
|
88 | 88 | impl ConvertibleToQueryAst for TermsQuery { |
89 | 89 | fn convert_to_query_ast(self) -> anyhow::Result<QueryAst> { |
90 | | - let term_queries: Vec<ElasticQueryDslInner> = self |
91 | | - .values |
92 | | - .into_iter() |
93 | | - .map(|value| term_query_from_field_value(self.field.clone(), value)) |
94 | | - .map(ElasticQueryDslInner::from) |
95 | | - .collect(); |
96 | | - let mut union = BoolQuery::union(term_queries); |
97 | | - union.boost = self.boost; |
98 | | - union.convert_to_query_ast() |
| 90 | + let mut terms_per_field = HashMap::new(); |
| 91 | + let values_set: BTreeSet<String> = self.values.into_iter().collect(); |
| 92 | + terms_per_field.insert(self.field, values_set); |
| 93 | + |
| 94 | + let term_set_query = TermSetQuery { terms_per_field }; |
| 95 | + let query_ast: QueryAst = term_set_query.into(); |
| 96 | + |
| 97 | + Ok(query_ast.boost(self.boost)) |
99 | 98 | } |
100 | 99 | } |
101 | 100 |
|
|
0 commit comments