elastic_query_builder/query/
script_score_query.rs1use crate::query::match_all_query::MatchAllQuery;
2use crate::query::QueryTrait;
3use crate::util::UtilMap;
4use serde_json::{Value};
5
6#[derive(Default)]
7pub struct ScriptScoreQuery {
8 query: Value,
9 script: String,
10 min_score: Option<f64>,
11 boost: Option<f64>,
12}
13
14impl ScriptScoreQuery {
15 pub fn new(script: &str) -> ScriptScoreQuery {
16 let mut query = ScriptScoreQuery::default();
17 query.script = script.to_string();
18 let q = MatchAllQuery::new().build();
19 query.query = q;
20 return query;
21 }
22 pub fn set_boost(mut self, boost: f64) -> ScriptScoreQuery {
23 self.boost = Some(boost);
24 self
25 }
26}
27
28impl QueryTrait for ScriptScoreQuery {
29 fn build(&self) -> Value {
30 let mut root = UtilMap::new();
31 root.append_value("query", self.query.clone());
32
33 let mut script = UtilMap::new();
34 script.append_string("source", self.script.clone());
35
36 root.append_object("script", script);
37 root.append_boost(self.boost);
38
39 root.build_object(self.query_name())
40 }
41
42 fn query_name(&self) -> String {
43 return "script_score".to_string();
44 }
45}
46
47#[test]
48fn test() {
49 let q = ScriptScoreQuery::new("doc['keywords'].length == 2")
50 .build()
51 .to_string();
52 assert_eq!(q, "{\"script_score\":{\"query\":{\"match_all\":{}},\"script\":{\"source\":\"doc['keywords'].length == 2\"}}}")
53}