mirror of
https://github.com/meilisearch/meilisearch.git
synced 2024-11-26 12:05:05 +08:00
enable string syntax for the filters
This commit is contained in:
parent
a717925caa
commit
b192cb9c1f
@ -277,35 +277,6 @@ impl Matcher for MatchingWords {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_facets_array(
|
|
||||||
txn: &RoTxn,
|
|
||||||
index: &Index,
|
|
||||||
arr: &[Value],
|
|
||||||
) -> anyhow::Result<Option<FacetCondition>> {
|
|
||||||
let mut ands = Vec::new();
|
|
||||||
for value in arr {
|
|
||||||
match value {
|
|
||||||
Value::String(s) => ands.push(Either::Right(s.clone())),
|
|
||||||
Value::Array(arr) => {
|
|
||||||
let mut ors = Vec::new();
|
|
||||||
for value in arr {
|
|
||||||
match value {
|
|
||||||
Value::String(s) => ors.push(s.clone()),
|
|
||||||
v => bail!("Invalid facet expression, expected String, found: {:?}", v),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ands.push(Either::Left(ors));
|
|
||||||
}
|
|
||||||
v => bail!(
|
|
||||||
"Invalid facet expression, expected String or [String], found: {:?}",
|
|
||||||
v
|
|
||||||
),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FacetCondition::from_array(txn, &index.0, ands)
|
|
||||||
}
|
|
||||||
|
|
||||||
struct Highlighter<'a, A> {
|
struct Highlighter<'a, A> {
|
||||||
analyzer: Analyzer<'a, A>,
|
analyzer: Analyzer<'a, A>,
|
||||||
marks: (String, String),
|
marks: (String, String),
|
||||||
@ -367,13 +338,41 @@ fn parse_facets(
|
|||||||
txn: &RoTxn,
|
txn: &RoTxn,
|
||||||
) -> anyhow::Result<Option<FacetCondition>> {
|
) -> anyhow::Result<Option<FacetCondition>> {
|
||||||
match facets {
|
match facets {
|
||||||
// Disabled for now
|
Value::String(expr) => Ok(Some(FacetCondition::from_str(txn, index, expr)?)),
|
||||||
//Value::String(expr) => Ok(Some(FacetCondition::from_str(txn, index, expr)?)),
|
|
||||||
Value::Array(arr) => parse_facets_array(txn, index, arr),
|
Value::Array(arr) => parse_facets_array(txn, index, arr),
|
||||||
v => bail!("Invalid facet expression, expected Array, found: {:?}", v),
|
v => bail!("Invalid facet expression, expected Array, found: {:?}", v),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn parse_facets_array(
|
||||||
|
txn: &RoTxn,
|
||||||
|
index: &Index,
|
||||||
|
arr: &[Value],
|
||||||
|
) -> anyhow::Result<Option<FacetCondition>> {
|
||||||
|
let mut ands = Vec::new();
|
||||||
|
for value in arr {
|
||||||
|
match value {
|
||||||
|
Value::String(s) => ands.push(Either::Right(s.clone())),
|
||||||
|
Value::Array(arr) => {
|
||||||
|
let mut ors = Vec::new();
|
||||||
|
for value in arr {
|
||||||
|
match value {
|
||||||
|
Value::String(s) => ors.push(s.clone()),
|
||||||
|
v => bail!("Invalid facet expression, expected String, found: {:?}", v),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ands.push(Either::Left(ors));
|
||||||
|
}
|
||||||
|
v => bail!(
|
||||||
|
"Invalid facet expression, expected String or [String], found: {:?}",
|
||||||
|
v
|
||||||
|
),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FacetCondition::from_array(txn, &index.0, ands)
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use std::iter::FromIterator;
|
use std::iter::FromIterator;
|
||||||
|
@ -2,6 +2,7 @@ use std::collections::HashSet;
|
|||||||
use std::convert::{TryFrom, TryInto};
|
use std::convert::{TryFrom, TryInto};
|
||||||
|
|
||||||
use actix_web::{get, post, web, HttpResponse};
|
use actix_web::{get, post, web, HttpResponse};
|
||||||
|
use serde_json::Value;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
|
|
||||||
use crate::error::ResponseError;
|
use crate::error::ResponseError;
|
||||||
@ -50,7 +51,12 @@ impl TryFrom<SearchQueryGet> for SearchQuery {
|
|||||||
.map(|attrs| attrs.split(',').map(String::from).collect::<Vec<_>>());
|
.map(|attrs| attrs.split(',').map(String::from).collect::<Vec<_>>());
|
||||||
|
|
||||||
let filter = match other.filter {
|
let filter = match other.filter {
|
||||||
Some(ref f) => Some(serde_json::from_str(f)?),
|
Some(f) => {
|
||||||
|
match serde_json::from_str(&f) {
|
||||||
|
Ok(v) => Some(v),
|
||||||
|
_ => Some(Value::String(f)),
|
||||||
|
}
|
||||||
|
},
|
||||||
None => None,
|
None => None,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user