mirror of
https://github.com/meilisearch/MeiliSearch
synced 2024-11-12 07:58:54 +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)),
|
||||
Between(left, right) => (Included(*left), Included(*right)),
|
||||
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 rtree = match index.geo_rtree(rtxn)? {
|
||||
Some(rtree) => rtree,
|
||||
@ -477,6 +480,9 @@ impl FilterCondition {
|
||||
return Ok(result);
|
||||
}
|
||||
GeoGreaterThan(point, distance) => {
|
||||
if index.filterable_fields(rtxn)?.contains("_geo") {
|
||||
Err(UserError::AttributeLimitReached)?; // TODO: TAMO use a real error
|
||||
}
|
||||
let result = Self::evaluate_operator(
|
||||
rtxn,
|
||||
index,
|
||||
|
@ -687,6 +687,8 @@ mod tests {
|
||||
let mut wtxn = index.write_txn().unwrap();
|
||||
let mut builder = Settings::new(&mut wtxn, &index, 0);
|
||||
builder.set_primary_key(S("id"));
|
||||
builder.set_filterable_fields(hashset!(S("_geo")));
|
||||
builder.set_sortable_fields(hashset!(S("_geo")));
|
||||
builder.execute(|_, _| ()).unwrap();
|
||||
|
||||
let content = &r#"[
|
||||
|
@ -234,7 +234,13 @@ impl<'t, 'u, 'i, 'a> IndexDocuments<'t, 'u, 'i, 'a> {
|
||||
// get filterable fields for facet databases
|
||||
let faceted_fields = self.index.faceted_fields_ids(self.wtxn)?;
|
||||
// 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 = stop_words.as_ref();
|
||||
|
Loading…
Reference in New Issue
Block a user