From 0cea706f10aa41e7689b9d34bac66fd446648515 Mon Sep 17 00:00:00 2001 From: Jason Wolfe Date: Fri, 18 May 2018 13:53:29 +0900 Subject: [PATCH 1/2] Add docs to new Query methods (#307) --- src/query/boolean_query/boolean_query.rs | 1 + src/query/phrase_query/phrase_query.rs | 2 ++ src/query/term_query/term_query.rs | 1 + 3 files changed, 4 insertions(+) diff --git a/src/query/boolean_query/boolean_query.rs b/src/query/boolean_query/boolean_query.rs index f4fa84c08..286d9f449 100644 --- a/src/query/boolean_query/boolean_query.rs +++ b/src/query/boolean_query/boolean_query.rs @@ -66,6 +66,7 @@ impl BooleanQuery { BooleanQuery::from(occur_term_queries) } + /// Deconstructed view of the clauses making up this query. pub fn clauses(&self) -> &[(Occur, Box)] { &self.subqueries[..] } diff --git a/src/query/phrase_query/phrase_query.rs b/src/query/phrase_query/phrase_query.rs index 0834442d1..0bb74b912 100644 --- a/src/query/phrase_query/phrase_query.rs +++ b/src/query/phrase_query/phrase_query.rs @@ -48,10 +48,12 @@ impl PhraseQuery { } } + /// The `Field` this `PhraseQuery` is targeting. pub fn field(&self) -> Field { self.field } + /// The `Term`s in the phrase making up this `PhraseQuery`. pub fn phrase_terms(&self) -> &[Term] { &self.phrase_terms[..] } diff --git a/src/query/term_query/term_query.rs b/src/query/term_query/term_query.rs index 82308b7d6..dae8e8c74 100644 --- a/src/query/term_query/term_query.rs +++ b/src/query/term_query/term_query.rs @@ -31,6 +31,7 @@ impl TermQuery { } } + /// The `Term` this query is built out of. pub fn term(&self) -> &Term { &self.term } From b2ce65f52d7c1b895f766d400f7c3178f49da2d5 Mon Sep 17 00:00:00 2001 From: jwolfe Date: Fri, 18 May 2018 17:00:39 +0900 Subject: [PATCH 2/2] Expose parameters of RangeQuery for external usage --- src/query/range_query.rs | 43 +++++++++++++++++++++++++++------------- src/schema/term.rs | 6 ++++++ 2 files changed, 35 insertions(+), 14 deletions(-) diff --git a/src/query/range_query.rs b/src/query/range_query.rs index 96f29fe35..c25fe3cd8 100644 --- a/src/query/range_query.rs +++ b/src/query/range_query.rs @@ -12,14 +12,14 @@ use std::ops::Range; use termdict::{TermDictionary, TermStreamer}; use Result; -fn map_bound Vec>( - bound: Bound, +fn map_bound TTo>( + bound: &Bound, transform: &Transform, -) -> Bound> { +) -> Bound { use self::Bound::*; match bound { - Excluded(from_val) => Excluded(transform(from_val)), - Included(from_val) => Included(transform(from_val)), + Excluded(ref from_val) => Excluded(transform(from_val)), + Included(ref from_val) => Included(transform(from_val)), Unbounded => Unbounded, } } @@ -113,12 +113,12 @@ impl RangeQuery { left_bound: Bound, right_bound: Bound, ) -> RangeQuery { - let make_term_val = |val: i64| Term::from_field_i64(field, val).value_bytes().to_owned(); + let make_term_val = |val: &i64| Term::from_field_i64(field, *val).value_bytes().to_owned(); RangeQuery { field, value_type: Type::I64, - left_bound: map_bound(left_bound, &make_term_val), - right_bound: map_bound(right_bound, &make_term_val), + left_bound: map_bound(&left_bound, &make_term_val), + right_bound: map_bound(&right_bound, &make_term_val), } } @@ -134,12 +134,12 @@ impl RangeQuery { left_bound: Bound, right_bound: Bound, ) -> RangeQuery { - let make_term_val = |val: u64| Term::from_field_u64(field, val).value_bytes().to_owned(); + let make_term_val = |val: &u64| Term::from_field_u64(field, *val).value_bytes().to_owned(); RangeQuery { field, value_type: Type::U64, - left_bound: map_bound(left_bound, &make_term_val), - right_bound: map_bound(right_bound, &make_term_val), + left_bound: map_bound(&left_bound, &make_term_val), + right_bound: map_bound(&right_bound, &make_term_val), } } @@ -167,12 +167,12 @@ impl RangeQuery { left: Bound<&'b str>, right: Bound<&'b str>, ) -> RangeQuery { - let make_term_val = |val: &str| val.as_bytes().to_vec(); + let make_term_val = |val: &&str| val.as_bytes().to_vec(); RangeQuery { field, value_type: Type::Str, - left_bound: map_bound(left, &make_term_val), - right_bound: map_bound(right, &make_term_val), + left_bound: map_bound(&left, &make_term_val), + right_bound: map_bound(&right, &make_term_val), } } @@ -187,6 +187,21 @@ impl RangeQuery { Bound::Excluded(range.end), ) } + + /// Field to search over + pub fn field(&self) -> Field { + self.field + } + + /// Lower bound of range + pub fn left_bound(&self) -> Bound { + map_bound(&self.left_bound, &|bytes| Term::from_field_bytes(self.field, bytes)) + } + + /// Upper bound of range + pub fn right_bound(&self) -> Bound { + map_bound(&self.right_bound, &|bytes| Term::from_field_bytes(self.field, bytes)) + } } impl Query for RangeQuery { diff --git a/src/schema/term.rs b/src/schema/term.rs index 55469a85e..92c7d11ec 100644 --- a/src/schema/term.rs +++ b/src/schema/term.rs @@ -109,6 +109,12 @@ impl Term { self.0.extend(bytes); } + pub(crate) fn from_field_bytes(field: Field, bytes: &[u8]) -> Term { + let mut term = Term::for_field(field); + term.set_bytes(bytes); + term + } + /// Set the texts only, keeping the field untouched. pub fn set_text(&mut self, text: &str) { self.set_bytes(text.as_bytes());