elastic_query_builder/query/
script_score_query.rs

1use 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}