Fix Meilisearch: Limit the text search scope using attributesToSearchOn

This commit is contained in:
Maurus Decimus
2026-07-05 11:22:09 +02:00
parent 448a0c1b08
commit 74ac0a7f0d
2 changed files with 23 additions and 1 deletions

View File

@@ -25,6 +25,7 @@ If you are upgrading from v0.16.x, replace the binary (or run `docker pull`). If
- Masked emails: Return `UnknownRecipient` only for disabled or expired masked emails.
- IDN: `sanitize_email` rejects valid Punycode domains.
- Auto-ban: IP block expiration ignores per-reason ban durations.
- Meilisearch: Limit the text search scope using `attributesToSearchOn`.
## [0.16.11] - 2026-06-25

View File

@@ -89,6 +89,19 @@ impl MeiliSearchStore {
if !filter_group.q.is_empty() {
body.insert("q".to_string(), Value::String(filter_group.q));
if !filter_group.search_on.is_empty() {
body.insert(
"attributesToSearchOn".to_string(),
Value::Array(
filter_group
.search_on
.into_iter()
.map(|field| Value::String(field.to_string()))
.collect(),
),
);
}
}
if !sort.is_empty() {
@@ -171,6 +184,7 @@ impl MeiliSearchStore {
struct FilterGroup {
q: String,
filter: String,
search_on: AHashSet<&'static str>,
}
fn build_query(filters: &[SearchFilter]) -> FilterGroup {
@@ -182,6 +196,7 @@ fn build_query(filters: &[SearchFilter]) -> FilterGroup {
let mut is_first = true;
let mut filter = String::new();
let mut queries = AHashSet::new();
let mut search_on = AHashSet::new();
for f in filters {
match f {
@@ -199,6 +214,8 @@ fn build_query(filters: &[SearchFilter]) -> FilterGroup {
}
};
search_on.insert(field.field_name());
if matches!(op, SearchOperator::Equal) {
queries.insert(format!("{value:?}"));
} else {
@@ -315,7 +332,11 @@ fn build_query(filters: &[SearchFilter]) -> FilterGroup {
}
}
FilterGroup { q, filter }
FilterGroup {
q,
filter,
search_on,
}
}
impl SearchOperator {