opensearch_dsl/search/queries/specialized/script_query.rs
1use crate::{search::*, util::*};
2
3/// Filters documents based on a provided
4/// [script](https://www.elastic.co/guide/en/opensearch/reference/current/modules-scripting-using.html).
5/// The script query is typically used in a
6/// [filter context](https://www.elastic.co/guide/en/opensearch/reference/current/query-filter-context.html).
7///
8/// To create script query:
9/// ```
10/// # use opensearch_dsl::queries::*;
11/// # use opensearch_dsl::queries::params::*;
12/// # let query =
13/// Query::script(Script::source("return doc['amount'].value < 10;"));
14/// ```
15/// <https://www.elastic.co/guide/en/opensearch/reference/current/query-dsl-script-query.html>
16#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
17#[serde(remote = "Self")]
18pub struct ScriptQuery {
19 script: Script,
20
21 #[serde(default, skip_serializing_if = "ShouldSkip::should_skip")]
22 boost: Option<f32>,
23
24 #[serde(default, skip_serializing_if = "ShouldSkip::should_skip")]
25 _name: Option<String>,
26}
27
28impl Query {
29 /// Creates an instance of [`ScriptQuery`]
30 ///
31 /// - `script` - Contains a script to run as a query. This script must
32 /// return a boolean value, `true` or `false`
33 pub fn script(script: Script) -> ScriptQuery {
34 ScriptQuery {
35 script,
36 boost: None,
37 _name: None,
38 }
39 }
40}
41
42impl ScriptQuery {
43 add_boost_and_name!();
44}
45
46impl ShouldSkip for ScriptQuery {}
47
48serialize_with_root!("script": ScriptQuery);
49deserialize_with_root!("script": ScriptQuery);
50
51#[cfg(test)]
52mod tests {
53 use super::*;
54
55 #[test]
56 fn serialization() {
57 assert_serialize_query(
58 Query::script(
59 Script::source("doc['numberOfCommits'].value > params.param1").param("param1", 50),
60 )
61 .name("_named_query")
62 .boost(1.1),
63 json!({
64 "script": {
65 "_name": "_named_query",
66 "boost": 1.1,
67 "script": {
68 "source": "doc['numberOfCommits'].value > params.param1",
69 "params": {
70 "param1": 50
71 }
72 }
73 }
74 }),
75 );
76 }
77}