mirror of
https://github.com/meilisearch/meilisearch.git
synced 2024-11-27 04:25:06 +08:00
start updating the exposed function to makes other modules happy
This commit is contained in:
parent
6c9165b6a8
commit
e25ca9776f
@ -262,7 +262,7 @@ impl Search {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let Some(ref filter) = self.filter {
|
if let Some(ref filter) = self.filter {
|
||||||
let condition = milli::FilterCondition::from_str(&txn, &index, filter)?;
|
let condition = milli::Filter::from_str(filter)?;
|
||||||
search.filter(condition);
|
search.filter(condition);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,7 +24,8 @@ use milli::documents::DocumentBatchReader;
|
|||||||
use milli::update::UpdateIndexingStep::*;
|
use milli::update::UpdateIndexingStep::*;
|
||||||
use milli::update::{IndexDocumentsMethod, Setting, UpdateBuilder};
|
use milli::update::{IndexDocumentsMethod, Setting, UpdateBuilder};
|
||||||
use milli::{
|
use milli::{
|
||||||
obkv_to_json, CompressionType, FilterCondition, Index, MatchingWords, SearchResult, SortError,
|
obkv_to_json, CompressionType, Filter as MilliFilter, FilterCondition, Index, MatchingWords,
|
||||||
|
SearchResult, SortError,
|
||||||
};
|
};
|
||||||
use once_cell::sync::OnceCell;
|
use once_cell::sync::OnceCell;
|
||||||
use rayon::ThreadPool;
|
use rayon::ThreadPool;
|
||||||
@ -739,7 +740,7 @@ async fn main() -> anyhow::Result<()> {
|
|||||||
|
|
||||||
let filters = match query.filters {
|
let filters = match query.filters {
|
||||||
Some(condition) if !condition.trim().is_empty() => {
|
Some(condition) if !condition.trim().is_empty() => {
|
||||||
Some(FilterCondition::from_str(&rtxn, &index, &condition).unwrap())
|
Some(MilliFilter::from_str(&condition).unwrap())
|
||||||
}
|
}
|
||||||
_otherwise => None,
|
_otherwise => None,
|
||||||
};
|
};
|
||||||
@ -747,7 +748,7 @@ async fn main() -> anyhow::Result<()> {
|
|||||||
let facet_filters = match query.facet_filters {
|
let facet_filters = match query.facet_filters {
|
||||||
Some(array) => {
|
Some(array) => {
|
||||||
let eithers = array.into_iter().map(Into::into);
|
let eithers = array.into_iter().map(Into::into);
|
||||||
FilterCondition::from_array(&rtxn, &index, eithers).unwrap()
|
MilliFilter::from_array(eithers).unwrap()
|
||||||
}
|
}
|
||||||
_otherwise => None,
|
_otherwise => None,
|
||||||
};
|
};
|
||||||
|
@ -2,5 +2,7 @@ mod facet_type;
|
|||||||
mod facet_value;
|
mod facet_value;
|
||||||
pub mod value_encoding;
|
pub mod value_encoding;
|
||||||
|
|
||||||
|
pub use filter_parser::{Condition, FilterCondition, FilterParserError, Span, Token};
|
||||||
|
|
||||||
pub use self::facet_type::FacetType;
|
pub use self::facet_type::FacetType;
|
||||||
pub use self::facet_value::FacetValue;
|
pub use self::facet_value::FacetValue;
|
||||||
|
@ -34,7 +34,9 @@ pub use self::heed_codec::{
|
|||||||
RoaringBitmapLenCodec, StrBEU32Codec, StrStrU8Codec,
|
RoaringBitmapLenCodec, StrBEU32Codec, StrStrU8Codec,
|
||||||
};
|
};
|
||||||
pub use self::index::Index;
|
pub use self::index::Index;
|
||||||
pub use self::search::{FacetDistribution, Filter, MatchingWords, Search, SearchResult};
|
pub use self::search::{
|
||||||
|
Condition, FacetDistribution, Filter, FilterCondition, MatchingWords, Search, SearchResult,
|
||||||
|
};
|
||||||
|
|
||||||
pub type Result<T> = std::result::Result<T, error::Error>;
|
pub type Result<T> = std::result::Result<T, error::Error>;
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ use std::ops::Bound::{self, Excluded, Included};
|
|||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
use either::Either;
|
use either::Either;
|
||||||
use filter_parser::{Condition, FilterCondition, FilterParserError, Span, Token};
|
pub use filter_parser::{Condition, FilterCondition, FilterParserError, Span, Token};
|
||||||
use heed::types::DecodeIgnore;
|
use heed::types::DecodeIgnore;
|
||||||
use log::debug;
|
use log::debug;
|
||||||
use nom::error::{ErrorKind, VerboseError};
|
use nom::error::{ErrorKind, VerboseError};
|
||||||
@ -209,7 +209,7 @@ impl<'a> Filter<'a> {
|
|||||||
// Make sure we always bound the ranges with the field id and the level,
|
// Make sure we always bound the ranges with the field id and the level,
|
||||||
// as the facets values are all in the same database and prefixed by the
|
// as the facets values are all in the same database and prefixed by the
|
||||||
// field id and the level.
|
// field id and the level.
|
||||||
// TODO TAMO: return good error when we can't parse a span
|
|
||||||
let (left, right) = match operator {
|
let (left, right) = match operator {
|
||||||
Condition::GreaterThan(val) => (Excluded(parse(val)?), Included(f64::MAX)),
|
Condition::GreaterThan(val) => (Excluded(parse(val)?), Included(f64::MAX)),
|
||||||
Condition::GreaterThanOrEqual(val) => (Included(parse(val)?), Included(f64::MAX)),
|
Condition::GreaterThanOrEqual(val) => (Included(parse(val)?), Included(f64::MAX)),
|
||||||
@ -315,10 +315,15 @@ impl<'a> Filter<'a> {
|
|||||||
|
|
||||||
match &self.condition {
|
match &self.condition {
|
||||||
FilterCondition::Condition { fid, op } => {
|
FilterCondition::Condition { fid, op } => {
|
||||||
// TODO: parse fid
|
let filterable_fields = index.fields_ids_map(rtxn)?;
|
||||||
let _ = fid;
|
if let Some(fid) = filterable_fields.id(fid.inner) {
|
||||||
let fid = 42;
|
|
||||||
Self::evaluate_operator(rtxn, index, numbers_db, strings_db, fid, &op)
|
Self::evaluate_operator(rtxn, index, numbers_db, strings_db, fid, &op)
|
||||||
|
} else {
|
||||||
|
// TODO TAMO: update the error message
|
||||||
|
return Err(UserError::InvalidFilter {
|
||||||
|
input: format!("Bad filter, available filters are {:?}", filterable_fields),
|
||||||
|
})?;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
FilterCondition::Or(lhs, rhs) => {
|
FilterCondition::Or(lhs, rhs) => {
|
||||||
let lhs = Self::evaluate(&(lhs.as_ref().clone()).into(), rtxn, index)?;
|
let lhs = Self::evaluate(&(lhs.as_ref().clone()).into(), rtxn, index)?;
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
pub use filter_parser::{Condition, FilterCondition};
|
||||||
|
|
||||||
pub use self::facet_distribution::FacetDistribution;
|
pub use self::facet_distribution::FacetDistribution;
|
||||||
pub use self::facet_number::{FacetNumberIter, FacetNumberRange, FacetNumberRevRange};
|
pub use self::facet_number::{FacetNumberIter, FacetNumberRange, FacetNumberRevRange};
|
||||||
pub use self::facet_string::FacetStringIter;
|
pub use self::facet_string::FacetStringIter;
|
||||||
|
@ -14,7 +14,7 @@ use meilisearch_tokenizer::{Analyzer, AnalyzerConfig};
|
|||||||
use once_cell::sync::Lazy;
|
use once_cell::sync::Lazy;
|
||||||
use roaring::bitmap::RoaringBitmap;
|
use roaring::bitmap::RoaringBitmap;
|
||||||
|
|
||||||
pub use self::facet::{FacetDistribution, FacetNumberIter, Filter};
|
pub use self::facet::{Condition, FacetDistribution, FacetNumberIter, Filter, FilterCondition};
|
||||||
pub use self::matching_words::MatchingWords;
|
pub use self::matching_words::MatchingWords;
|
||||||
use self::query_tree::QueryTreeBuilder;
|
use self::query_tree::QueryTreeBuilder;
|
||||||
use crate::error::UserError;
|
use crate::error::UserError;
|
||||||
|
Loading…
Reference in New Issue
Block a user