mirror of
https://github.com/meilisearch/MeiliSearch
synced 2024-12-25 06:00:08 +01:00
only index _geo if it's set as sortable OR filterable
and only allow the filters if geo was set to filterable
This commit is contained in:
parent
f73273d71c
commit
5bb175fc90
@ -463,6 +463,9 @@ impl FilterCondition {
|
|||||||
LowerThanOrEqual(val) => (Included(f64::MIN), Included(*val)),
|
LowerThanOrEqual(val) => (Included(f64::MIN), Included(*val)),
|
||||||
Between(left, right) => (Included(*left), Included(*right)),
|
Between(left, right) => (Included(*left), Included(*right)),
|
||||||
GeoLowerThan(point, distance) => {
|
GeoLowerThan(point, distance) => {
|
||||||
|
if index.filterable_fields(rtxn)?.contains("_geo") {
|
||||||
|
Err(UserError::AttributeLimitReached)?; // TODO: TAMO use a real error
|
||||||
|
}
|
||||||
let mut result = RoaringBitmap::new();
|
let mut result = RoaringBitmap::new();
|
||||||
let rtree = match index.geo_rtree(rtxn)? {
|
let rtree = match index.geo_rtree(rtxn)? {
|
||||||
Some(rtree) => rtree,
|
Some(rtree) => rtree,
|
||||||
@ -477,6 +480,9 @@ impl FilterCondition {
|
|||||||
return Ok(result);
|
return Ok(result);
|
||||||
}
|
}
|
||||||
GeoGreaterThan(point, distance) => {
|
GeoGreaterThan(point, distance) => {
|
||||||
|
if index.filterable_fields(rtxn)?.contains("_geo") {
|
||||||
|
Err(UserError::AttributeLimitReached)?; // TODO: TAMO use a real error
|
||||||
|
}
|
||||||
let result = Self::evaluate_operator(
|
let result = Self::evaluate_operator(
|
||||||
rtxn,
|
rtxn,
|
||||||
index,
|
index,
|
||||||
|
@ -687,6 +687,8 @@ mod tests {
|
|||||||
let mut wtxn = index.write_txn().unwrap();
|
let mut wtxn = index.write_txn().unwrap();
|
||||||
let mut builder = Settings::new(&mut wtxn, &index, 0);
|
let mut builder = Settings::new(&mut wtxn, &index, 0);
|
||||||
builder.set_primary_key(S("id"));
|
builder.set_primary_key(S("id"));
|
||||||
|
builder.set_filterable_fields(hashset!(S("_geo")));
|
||||||
|
builder.set_sortable_fields(hashset!(S("_geo")));
|
||||||
builder.execute(|_, _| ()).unwrap();
|
builder.execute(|_, _| ()).unwrap();
|
||||||
|
|
||||||
let content = &r#"[
|
let content = &r#"[
|
||||||
|
@ -234,7 +234,13 @@ impl<'t, 'u, 'i, 'a> IndexDocuments<'t, 'u, 'i, 'a> {
|
|||||||
// get filterable fields for facet databases
|
// get filterable fields for facet databases
|
||||||
let faceted_fields = self.index.faceted_fields_ids(self.wtxn)?;
|
let faceted_fields = self.index.faceted_fields_ids(self.wtxn)?;
|
||||||
// get the fid of the `_geo` field.
|
// get the fid of the `_geo` field.
|
||||||
let geo_field_id = self.index.fields_ids_map(self.wtxn)?.id("_geo");
|
let geo_field_id = if let Some(gfid) = self.index.fields_ids_map(self.wtxn)?.id("_geo") {
|
||||||
|
(self.index.sortable_fields_ids(self.wtxn)?.contains(&gfid)
|
||||||
|
|| self.index.filterable_fields_ids(self.wtxn)?.contains(&gfid))
|
||||||
|
.then(|| gfid)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
let stop_words = self.index.stop_words(self.wtxn)?;
|
let stop_words = self.index.stop_words(self.wtxn)?;
|
||||||
// let stop_words = stop_words.as_ref();
|
// let stop_words = stop_words.as_ref();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user