Disconnected facet / fast field merges / examples

This commit is contained in:
Paul Masurel
2023-01-17 23:55:57 +09:00
parent 007168ff4c
commit e435b6fdd1
45 changed files with 1715 additions and 2124 deletions

View File

@@ -15,7 +15,7 @@ mod more_like_this;
mod phrase_query;
mod query;
mod query_parser;
mod range_query;
// mod range_query;
mod regex_query;
mod reqopt_scorer;
mod scorer;
@@ -50,7 +50,7 @@ pub use self::more_like_this::{MoreLikeThisQuery, MoreLikeThisQueryBuilder};
pub use self::phrase_query::PhraseQuery;
pub use self::query::{EnableScoring, Query, QueryClone};
pub use self::query_parser::{QueryParser, QueryParserError};
pub use self::range_query::RangeQuery;
// pub use self::range_query::RangeQuery;
pub use self::regex_query::RegexQuery;
pub use self::reqopt_scorer::RequiredOptionalScorer;
pub use self::score_combiner::{

View File

@@ -13,10 +13,11 @@ use crate::core::Index;
use crate::indexer::{
convert_to_fast_value_and_get_term, set_string_and_get_terms, JsonTermWriter,
};
use crate::query::range_query::is_type_valid_for_fastfield_range_query;
// use crate::query::range_query::is_type_valid_for_fastfield_range_query;
use crate::query::{
AllQuery, BooleanQuery, BoostQuery, EmptyQuery, FuzzyTermQuery, Occur, PhraseQuery, Query,
RangeQuery, TermQuery, TermSetQuery,
// RangeQuery,
TermQuery, TermSetQuery,
};
use crate::schema::{
Facet, FacetParseError, Field, FieldType, IndexRecordOption, IntoIpv6Addr, JsonObjectOptions,
@@ -334,6 +335,8 @@ impl QueryParser {
json_path: &str,
phrase: &str,
) -> Result<Term, QueryParserError> {
todo!();
/*
let field_entry = self.schema.get_field_entry(field);
let field_type = field_entry.field_type();
let field_supports_ff_range_queries = field_type.is_fast()
@@ -417,6 +420,7 @@ impl QueryParser {
Ok(Term::from_field_ip_addr(field, ip_v6))
}
}
*/
}
fn compute_logical_ast_for_leaf(
@@ -740,9 +744,11 @@ fn convert_literal_to_query(
value_type,
lower,
upper,
} => Box::new(RangeQuery::new_term_bounds(
field, value_type, &lower, &upper,
)),
} => { todo!();
// Box::new(RangeQuery::new_term_bounds(
// field, value_type, &lower, &upper,
// ))
} ,
LogicalLiteral::Set { elements, .. } => Box::new(TermSetQuery::new(elements)),
LogicalLiteral::All => Box::new(AllQuery),
}

View File

@@ -4,7 +4,7 @@ use std::sync::Arc;
use fastfield_codecs::Column;
use crate::fastfield::{MakeZero, MultiValuedFastFieldReader};
use crate::fastfield::MakeZero;
use crate::{DocId, DocSet, TERMINATED};
/// Helper to have a cursor over a vec of docids

View File

@@ -8,10 +8,13 @@ use std::ops::{Bound, RangeInclusive};
use common::BinarySerializable;
use fastfield_codecs::MonotonicallyMappableToU128;
use super::fast_field_range_query::{FastFieldCardinality, RangeDocSet};
use super::range_query::map_bound;
use crate::query::{ConstScorer, Explanation, Scorer, Weight};
<<<<<<< HEAD
use crate::schema::Cardinality;
=======
use crate::schema::Field;
>>>>>>> fd1deefd12 (Disconnected facet / fast field merges / examples)
use crate::{DocId, DocSet, Score, SegmentReader, TantivyError};
/// `IPFastFieldRangeWeight` uses the ip address fast field to execute range queries.
@@ -40,6 +43,7 @@ impl IPFastFieldRangeWeight {
impl Weight for IPFastFieldRangeWeight {
fn scorer(&self, reader: &SegmentReader, boost: Score) -> crate::Result<Box<dyn Scorer>> {
<<<<<<< HEAD
let field_type = reader
.schema()
.get_field_entry(reader.schema().get_field(&self.field)?)
@@ -74,6 +78,40 @@ impl Weight for IPFastFieldRangeWeight {
Ok(Box::new(ConstScorer::new(docset, boost)))
}
}
=======
todo!();
// let field_type = reader.schema().get_field_entry(self.field).field_type();
// match field_type.fastfield_cardinality().unwrap() {
// Cardinality::SingleValue => {
// let ip_addr_fast_field = reader.fast_fields().ip_addr(self.field)?;
// let value_range = bound_to_value_range(
// &self.left_bound,
// &self.right_bound,
// ip_addr_fast_field.min_value(),
// ip_addr_fast_field.max_value(),
// );
// let docset = RangeDocSet::new(
// value_range,
// FastFieldCardinality::SingleValue(ip_addr_fast_field),
// );
// Ok(Box::new(ConstScorer::new(docset, boost)))
// }
// Cardinality::MultiValues => {
// let ip_addr_fast_field = reader.fast_fields().ip_addrs(self.field)?;
// let value_range = bound_to_value_range(
// &self.left_bound,
// &self.right_bound,
// ip_addr_fast_field.min_value(),
// ip_addr_fast_field.max_value(),
// );
// let docset = RangeDocSet::new(
// value_range,
// FastFieldCardinality::MultiValue(ip_addr_fast_field),
// );
// Ok(Box::new(ConstScorer::new(docset, boost)))
// }
// }
>>>>>>> fd1deefd12 (Disconnected facet / fast field merges / examples)
}
fn explain(&self, reader: &SegmentReader, doc: DocId) -> crate::Result<Explanation> {

View File

@@ -6,10 +6,14 @@ use std::ops::{Bound, RangeInclusive};
use fastfield_codecs::MonotonicallyMappableToU64;
use super::fast_field_range_query::{FastFieldCardinality, RangeDocSet};
use super::fast_field_range_query::RangeDocSet;
use super::range_query::map_bound;
use crate::query::{ConstScorer, Explanation, Scorer, Weight};
<<<<<<< HEAD
use crate::schema::Cardinality;
=======
use crate::schema::Field;
>>>>>>> fd1deefd12 (Disconnected facet / fast field merges / examples)
use crate::{DocId, DocSet, Score, SegmentReader, TantivyError};
/// `FastFieldRangeWeight` uses the fast field to execute range queries.
@@ -33,6 +37,7 @@ impl FastFieldRangeWeight {
impl Weight for FastFieldRangeWeight {
fn scorer(&self, reader: &SegmentReader, boost: Score) -> crate::Result<Box<dyn Scorer>> {
<<<<<<< HEAD
let field_type = reader
.schema()
.get_field_entry(reader.schema().get_field(&self.field)?)
@@ -63,6 +68,36 @@ impl Weight for FastFieldRangeWeight {
Ok(Box::new(ConstScorer::new(docset, boost)))
}
}
=======
todo!();
// let field_type = reader.schema().get_field_entry(self.field).field_type();
// match field_type.fastfield_cardinality().unwrap() {
// Cardinality::SingleValue => {
// let fast_field = reader.fast_fields().u64_lenient(self.field)?;
// let value_range = bound_to_value_range(
// &self.left_bound,
// &self.right_bound,
// fast_field.min_value(),
// fast_field.max_value(),
// );
// let docset =
// RangeDocSet::new(value_range, FastFieldCardinality::SingleValue(fast_field));
// Ok(Box::new(ConstScorer::new(docset, boost)))
// }
// Cardinality::MultiValues => {
// let fast_field = reader.fast_fields().u64s_lenient(self.field)?;
// let value_range = bound_to_value_range(
// &self.left_bound,
// &self.right_bound,
// fast_field.min_value(),
// fast_field.max_value(),
// );
// let docset =
// RangeDocSet::new(value_range, FastFieldCardinality::MultiValue(fast_field));
// Ok(Box::new(ConstScorer::new(docset, boost)))
// }
// }
>>>>>>> fd1deefd12 (Disconnected facet / fast field merges / examples)
}
fn explain(&self, reader: &SegmentReader, doc: DocId) -> crate::Result<Explanation> {