issue/50 Added use case for BooleanQuery

This commit is contained in:
Paul Masurel
2016-11-04 12:23:27 +09:00
parent f2df0bf0e9
commit f7c882f3da
3 changed files with 89 additions and 29 deletions

View File

@@ -1,7 +1,6 @@
use Result;
use std::any::Any;
use super::boolean_weight::BooleanWeight;
use super::BooleanClause;
use query::Weight;
use Searcher;
use query::Query;
@@ -20,12 +19,12 @@ use query::OccurFilter;
/// a `MustNot` occurence.
#[derive(Debug)]
pub struct BooleanQuery {
clauses: Vec<BooleanClause>,
subqueries: Vec<(Occur, Box<Query>)>
}
impl From<Vec<BooleanClause>> for BooleanQuery {
fn from(clauses: Vec<BooleanClause>) -> BooleanQuery {
BooleanQuery { clauses: clauses }
impl From<Vec<(Occur, Box<Query>)>> for BooleanQuery {
fn from(subqueries: Vec<(Occur, Box<Query>)>) -> BooleanQuery {
BooleanQuery { subqueries: subqueries }
}
}
@@ -35,13 +34,13 @@ impl Query for BooleanQuery {
}
fn weight(&self, searcher: &Searcher) -> Result<Box<Weight>> {
let sub_weights = try!(self.clauses
let sub_weights = try!(self.subqueries
.iter()
.map(|clause| clause.query.weight(searcher))
.map(|&(ref _occur, ref subquery)| subquery.weight(searcher))
.collect());
let occurs: Vec<Occur> = self.clauses
let occurs: Vec<Occur> = self.subqueries
.iter()
.map(|clause| clause.occur)
.map(|&(ref occur, ref _subquery)| *occur)
.collect();
let filter = OccurFilter::new(&occurs);
Ok(box BooleanWeight::new(sub_weights, filter))