1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
use crate::util::*;
use crate::{MultiTermQuery, Query};
use serde::Serialize;
/// The span_multi query allows you to wrap a `multi term query` (one of
/// [`wildcard`](crate::WildcardQuery), [`fuzzy`](crate::FuzzyQuery),
/// [`prefix`](crate::PrefixQuery), [`range`](crate::RangeQuery) or
/// [`regexp`](crate::RegexpQuery) query) as a [`span query`](crate::SpanQuery), so it can be
/// nested.
///
/// <https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-span-multi-term-query.html>
#[derive(Debug, Clone, PartialEq, Serialize)]
#[serde(remote = "Self")]
pub struct SpanMultiQuery {
r#match: Box<MultiTermQuery>,
}
impl ShouldSkip for SpanMultiQuery {}
serialize_with_root!("span_multi": SpanMultiQuery);
impl Query {
/// Creates an instance of [`SpanMultiQuery`]
#[allow(unused)]
pub fn span_multi<Q>(r#match: Q) -> SpanMultiQuery
where
Q: Into<MultiTermQuery>,
{
SpanMultiQuery {
r#match: Box::new(r#match.into()),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn serialization() {
assert_serialize_query(
Query::span_multi(Query::prefix("test", "1234")),
json!({
"span_multi": {
"match" : {
"prefix": {
"test": {
"value": "1234"
}
}
}
}
}),
);
assert_serialize_query(
Query::span_multi(Query::prefix("test", "1234")),
json!({
"span_multi": {
"match" : {
"prefix": {
"test": {
"value": "1234"
}
}
}
}
}),
);
}
}