Skip to content

Fix frequently failing tests on Windows - #6520

Merged
dureuill merged 3 commits into
mainfrom
fix-win-test
Jul 16, 2026
Merged

Fix frequently failing tests on Windows#6520
dureuill merged 3 commits into
mainfrom
fix-win-test

Conversation

@dureuill

@dureuill dureuill commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Changelog

Fix two tests that tended to fail on Windows because they would not await some tasks.

Generative AI tools

  • This PR does not use generative AI tooling
  • This PR uses generative AI tooling and respect the related policies
    • list of used tools and what they were used for

@dureuill dureuill added the no db change The database didn't change label Jul 15, 2026
@dureuill dureuill changed the title Attempt to fix frequently failing test on Windows Fix frequently failing tests on Windows Jul 16, 2026
@dureuill
dureuill enabled auto-merge July 16, 2026 12:09
@dureuill
dureuill added this pull request to the merge queue Jul 16, 2026

@ManyTheFish ManyTheFish left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved

Merged via the queue into main with commit 47d7e07 Jul 16, 2026
22 checks passed
@dureuill
dureuill deleted the fix-win-test branch July 16, 2026 12:36
ajgon pushed a commit to deedee-ops/home-ops that referenced this pull request Jul 20, 2026
#378)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [getmeili/meilisearch](https://github.com/meilisearch/meilisearch) | minor | `v1.49.0` → `v1.50.0` |

---

### Release Notes

<details>
<summary>meilisearch/meilisearch (getmeili/meilisearch)</summary>

### [`v1.50.0`](https://github.com/meilisearch/meilisearch/releases/tag/v1.50.0): 🐐

[Compare Source](meilisearch/meilisearch@v1.49.0...v1.50.0)

Meilisearch v1.50 revamps the [Dynamic Search Rules](https://www.meilisearch.com/docs/capabilities/search_rules/overview), adds support for federated document fetch in sharded configurations, among other improvements

##### Breaking changes

This release introduces breaking changes for users using some experimental features

##### `dynamicSearchRules` experimental feature

##### Request type changes

1. `priority` has been replaced with `precedence`, which better reflects the behavior (lower precedence means the rule is applied first)
2. `conditions` has been modified from an array to an object with two fields: "query" of type `QueryCondition` and "time" of time `TimeCondition`
3. New type `QueryCondition` that contains the fields `isEmpty` (as previously) and `words` instead of `contains` (same type)
4. It is now possible to pass `isEmpty: false` with `words` in a `QueryCondition`. Passing `isEmpty:true` with `words` still results in a synchronous error.
5. New type `TimeCondition` with fields `start` and `end` (unchanged semantics from previous type).
6. When specifying the `selector` of an `Action`, it is now mandatory to specify an `id`. Previously, it was optional, but the action would never trigger.
7. When listing rules with `POST /dynamic-search-rules`, `filter.attributePatterns` has been replaced with `filter.query`, an optional string that searches in rule `description` and `conditions.query.words`.
8. When calling `DELETE /dynamic-search-rules/{:ruleUid}` or `PATCH /dynamic-search-rules/{:ruleUid}` in a sharded configuration, endpoint will not return a HTTP 400 error if called on a follower remote rather than on the leader.

##### Response changes

1. `PATCH /dynamic-search-rules/{:ruleUid}` and `DELETE /dynamic-search-rules/{:ruleUid}` now register an asynchronous task..
2. The response is modified to return the registered task instead of the modified dynamic search rule.
3. HTTP 404 is no longer returned if the `{:ruleUid}` portion of the URL refers to a rule that doesn't exist. This is because rules are processed asynchronously, and is consistent with the behavior of `DELETE /indexes/{:indexUid}/documents/{:docId}` for `{:docId}`

##### `network` experimental feature

The default behavior for users using the network experimental feature with sharding configured (`leader` not `null`) will change on the following routes:

- **GET** `indexes/:uid/documents`
- **GET** `indexes/:uid/documents/:document_id`
- **POST** `indexes/:uid/documents/fetch`

Meilisearch will now fetch the documents from all the shards and not only on the local machine when processing the request.
To keep the same behavior as before, users will have to set `useNetwork` to `false` when making their request.

##### 🌈 Improvements

##### Scaling up the Dynamic Search Rules

- Dynamic search rules scale up to 75K rules without any impact on the search
- The API of Dynamic Search Rules has been simplified
  - It is harder to send conditions that will result in the rules never activating
- This also unlocks future improvements such as filter activation conditions for search rules

##### Additions

- Add a new `DELETE /dynamic-search-rule` route that deletes all the DSRs
- Add the concept of "DSR fuel" that determines how much energy is spent resolving DSR during a search. The fuel is initialized with some default variables that can be overridden using environment variables:
  - `MEILI_EXPERIMENTAL_DSR_FUEL_MAX_COUNTED_WORDS`: max number of words considered inside of a search query for the purpose of finding `conditions.query.words` constraints. Defaults to 10, max value is 255
  - `MEILI_EXPERIMENTAL_DSR_FUEL_MAX_ACTIVE_RULES`: max number of active rules whose actions are evaluated. Defaults to 1000, max value is [`4294967`](meilisearch/meilisearch@4294967295)
  - `MEILI_EXPERIMENTAL_DSR_FUEL_MAX_PIN_ACTIONS`: max number of pin actions that are applied. Defaults to 100, max value is [`4294967`](meilisearch/meilisearch@4294967295)
  - `MEILI_EXPERIMENTAL_DSR_FUEL_WORD_FUEL`: max number of constraint combinations that are evaluated for the purpose of finding `conditions.query.words` constraints. Defaults to 4096, max value is [`4294967`](meilisearch/meilisearch@4294967295)

By [@&#8203;dureuill](https://github.com/dureuill) in [#&#8203;6484](meilisearch/meilisearch#6484) and [#&#8203;6506](meilisearch/meilisearch#6506)

##### Behavior changes

- The `conditions.query.words` behaves differently from `query.contains`: previously, a rule would match if its conditions `query.contains` would be substrings of `q` in the search query in the sense of [`str::contains`](https://doc.rust-lang.org/std/primitive.str.html#method.contains). Now, a rule matches if all the words in `conditions.query.words` appear in `q` (after normalization). For `q = hero super`, `query.contains = super hero` would **not** match, whereas `conditions.query.words = super hero` does now match. This behavior is more in line with regular search, and allows improving performance.
- Dynamic search rules are now replicated from the leader to its follower, when in a sharded configuration

##### Federated document fetch routes

**GET** `indexes/:uid/documents`, **GET** `indexes/:uid/documents/:document_id` and **POST** `indexes/:uid/documents/fetch` will now fetch the documents from all the shards in the configured network.

Moreover, a new `useNetwork` parameter is available to activate or deactivate the usage of the network.

By [@&#8203;ManyTheFish](https://github.com/ManyTheFish) in [#&#8203;6495](meilisearch/meilisearch#6495)

##### Support partial wildcards when requesting facets

The `facets` parameter in search and federated search now supports more wildcards. Previously, only the single wildcard `"*"` was supported, requesting all filterable fields.

Now, patterns *containing* `*`  are supported with the same matching rules as in `filterableAttributes.attributePatterns` and `localizedAttributes.attributePatterns`, such as `dogs.*`, which will add to the facet distribution all filterable fields that match the pattern (such as `dogs.intel`, `dogs.kefir`, etc.).

By [@&#8203;Kerollmops](https://github.com/Kerollmops) in [#&#8203;6497](meilisearch/meilisearch#6497)

##### 🦋 Fixes

##### Fix migration from v1.48 and earlier

Migration via `--experimental-dumpless-upgrade` would fail in some cases in v1.49, when trying to migrate synonyms that contained no words (empty synonyms, or containing only separator tokens such as `&`).

Such synonyms are now ignored during migration, avoiding the issue.

By [@&#8203;Kerollmops](https://github.com/Kerollmops) in [#&#8203;6501](meilisearch/meilisearch#6501)

##### Fix filter memory consumption in some cases

In some conditions, the memory consumption of filters would increase quadratically with the length of the filter. This is now resolved for these cases.

By [@&#8203;ManyTheFish](https://github.com/ManyTheFish) in [#&#8203;6509](meilisearch/meilisearch#6509)

##### No longer reject some correctly-escaped filters

Fix a bug where some filters containing escaped characters (such as \\) would cause search requests to fail with invalid\_search\_filter

By [@&#8203;dureuill](https://github.com/dureuill) in [#&#8203;6499](meilisearch/meilisearch#6499)

##### More fault-tolerant S3 snapshots

*Potentially* fix an issue when sending a request to AWS S3 to create a new multipart upload, ensuring we resend the request if it fails.

By [@&#8203;Kerollmops](https://github.com/Kerollmops) in [#&#8203;6494](meilisearch/meilisearch#6494)

##### 🔩 Miscellaneous changes

- Add missing route descriptions for documentation by [@&#8203;curquiza](https://github.com/curquiza) in [#&#8203;6500](meilisearch/meilisearch#6500)
- Make the prototype docs clearer by [@&#8203;curquiza](https://github.com/curquiza) in [#&#8203;6503](meilisearch/meilisearch#6503)
- Improve maintenability by simplifying partitioning step by [@&#8203;ManyTheFish](https://github.com/ManyTheFish) in [#&#8203;6511](meilisearch/meilisearch#6511)
- Fix frequently failing tests on Windows by [@&#8203;dureuill](https://github.com/dureuill) in [#&#8203;6520](meilisearch/meilisearch#6520)

**Full Changelog**: <meilisearch/meilisearch@v1.49.0...v1.50.0>

</details>

---

### Configuration

📅 **Schedule**: (in timezone Europe/Warsaw)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNjUuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI2NS4yIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbInJlbm92YXRlL2NvbnRhaW5lciIsInR5cGUvbWlub3IiXX0=-->

Reviewed-on: https://git.ajgon.casa/deedee/mark13/pulls/378
ajgon pushed a commit to deedee-ops/home-ops that referenced this pull request Jul 20, 2026
#378)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [getmeili/meilisearch](https://github.com/meilisearch/meilisearch) | minor | `v1.49.0` → `v1.50.0` |

---

### Release Notes

<details>
<summary>meilisearch/meilisearch (getmeili/meilisearch)</summary>

### [`v1.50.0`](https://github.com/meilisearch/meilisearch/releases/tag/v1.50.0): 🐐

[Compare Source](meilisearch/meilisearch@v1.49.0...v1.50.0)

Meilisearch v1.50 revamps the [Dynamic Search Rules](https://www.meilisearch.com/docs/capabilities/search_rules/overview), adds support for federated document fetch in sharded configurations, among other improvements

##### Breaking changes

This release introduces breaking changes for users using some experimental features

##### `dynamicSearchRules` experimental feature

##### Request type changes

1. `priority` has been replaced with `precedence`, which better reflects the behavior (lower precedence means the rule is applied first)
2. `conditions` has been modified from an array to an object with two fields: "query" of type `QueryCondition` and "time" of time `TimeCondition`
3. New type `QueryCondition` that contains the fields `isEmpty` (as previously) and `words` instead of `contains` (same type)
4. It is now possible to pass `isEmpty: false` with `words` in a `QueryCondition`. Passing `isEmpty:true` with `words` still results in a synchronous error.
5. New type `TimeCondition` with fields `start` and `end` (unchanged semantics from previous type).
6. When specifying the `selector` of an `Action`, it is now mandatory to specify an `id`. Previously, it was optional, but the action would never trigger.
7. When listing rules with `POST /dynamic-search-rules`, `filter.attributePatterns` has been replaced with `filter.query`, an optional string that searches in rule `description` and `conditions.query.words`.
8. When calling `DELETE /dynamic-search-rules/{:ruleUid}` or `PATCH /dynamic-search-rules/{:ruleUid}` in a sharded configuration, endpoint will not return a HTTP 400 error if called on a follower remote rather than on the leader.

##### Response changes

1. `PATCH /dynamic-search-rules/{:ruleUid}` and `DELETE /dynamic-search-rules/{:ruleUid}` now register an asynchronous task..
2. The response is modified to return the registered task instead of the modified dynamic search rule.
3. HTTP 404 is no longer returned if the `{:ruleUid}` portion of the URL refers to a rule that doesn't exist. This is because rules are processed asynchronously, and is consistent with the behavior of `DELETE /indexes/{:indexUid}/documents/{:docId}` for `{:docId}`

##### `network` experimental feature

The default behavior for users using the network experimental feature with sharding configured (`leader` not `null`) will change on the following routes:

- **GET** `indexes/:uid/documents`
- **GET** `indexes/:uid/documents/:document_id`
- **POST** `indexes/:uid/documents/fetch`

Meilisearch will now fetch the documents from all the shards and not only on the local machine when processing the request.
To keep the same behavior as before, users will have to set `useNetwork` to `false` when making their request.

##### 🌈 Improvements

##### Scaling up the Dynamic Search Rules

- Dynamic search rules scale up to 75K rules without any impact on the search
- The API of Dynamic Search Rules has been simplified
  - It is harder to send conditions that will result in the rules never activating
- This also unlocks future improvements such as filter activation conditions for search rules

##### Additions

- Add a new `DELETE /dynamic-search-rule` route that deletes all the DSRs
- Add the concept of "DSR fuel" that determines how much energy is spent resolving DSR during a search. The fuel is initialized with some default variables that can be overridden using environment variables:
  - `MEILI_EXPERIMENTAL_DSR_FUEL_MAX_COUNTED_WORDS`: max number of words considered inside of a search query for the purpose of finding `conditions.query.words` constraints. Defaults to 10, max value is 255
  - `MEILI_EXPERIMENTAL_DSR_FUEL_MAX_ACTIVE_RULES`: max number of active rules whose actions are evaluated. Defaults to 1000, max value is [`4294967`](meilisearch/meilisearch@4294967295)
  - `MEILI_EXPERIMENTAL_DSR_FUEL_MAX_PIN_ACTIONS`: max number of pin actions that are applied. Defaults to 100, max value is [`4294967`](meilisearch/meilisearch@4294967295)
  - `MEILI_EXPERIMENTAL_DSR_FUEL_WORD_FUEL`: max number of constraint combinations that are evaluated for the purpose of finding `conditions.query.words` constraints. Defaults to 4096, max value is [`4294967`](meilisearch/meilisearch@4294967295)

By [@&#8203;dureuill](https://github.com/dureuill) in [#&#8203;6484](meilisearch/meilisearch#6484) and [#&#8203;6506](meilisearch/meilisearch#6506)

##### Behavior changes

- The `conditions.query.words` behaves differently from `query.contains`: previously, a rule would match if its conditions `query.contains` would be substrings of `q` in the search query in the sense of [`str::contains`](https://doc.rust-lang.org/std/primitive.str.html#method.contains). Now, a rule matches if all the words in `conditions.query.words` appear in `q` (after normalization). For `q = hero super`, `query.contains = super hero` would **not** match, whereas `conditions.query.words = super hero` does now match. This behavior is more in line with regular search, and allows improving performance.
- Dynamic search rules are now replicated from the leader to its follower, when in a sharded configuration

##### Federated document fetch routes

**GET** `indexes/:uid/documents`, **GET** `indexes/:uid/documents/:document_id` and **POST** `indexes/:uid/documents/fetch` will now fetch the documents from all the shards in the configured network.

Moreover, a new `useNetwork` parameter is available to activate or deactivate the usage of the network.

By [@&#8203;ManyTheFish](https://github.com/ManyTheFish) in [#&#8203;6495](meilisearch/meilisearch#6495)

##### Support partial wildcards when requesting facets

The `facets` parameter in search and federated search now supports more wildcards. Previously, only the single wildcard `"*"` was supported, requesting all filterable fields.

Now, patterns *containing* `*`  are supported with the same matching rules as in `filterableAttributes.attributePatterns` and `localizedAttributes.attributePatterns`, such as `dogs.*`, which will add to the facet distribution all filterable fields that match the pattern (such as `dogs.intel`, `dogs.kefir`, etc.).

By [@&#8203;Kerollmops](https://github.com/Kerollmops) in [#&#8203;6497](meilisearch/meilisearch#6497)

##### 🦋 Fixes

##### Fix migration from v1.48 and earlier

Migration via `--experimental-dumpless-upgrade` would fail in some cases in v1.49, when trying to migrate synonyms that contained no words (empty synonyms, or containing only separator tokens such as `&`).

Such synonyms are now ignored during migration, avoiding the issue.

By [@&#8203;Kerollmops](https://github.com/Kerollmops) in [#&#8203;6501](meilisearch/meilisearch#6501)

##### Fix filter memory consumption in some cases

In some conditions, the memory consumption of filters would increase quadratically with the length of the filter. This is now resolved for these cases.

By [@&#8203;ManyTheFish](https://github.com/ManyTheFish) in [#&#8203;6509](meilisearch/meilisearch#6509)

##### No longer reject some correctly-escaped filters

Fix a bug where some filters containing escaped characters (such as \\) would cause search requests to fail with invalid\_search\_filter

By [@&#8203;dureuill](https://github.com/dureuill) in [#&#8203;6499](meilisearch/meilisearch#6499)

##### More fault-tolerant S3 snapshots

*Potentially* fix an issue when sending a request to AWS S3 to create a new multipart upload, ensuring we resend the request if it fails.

By [@&#8203;Kerollmops](https://github.com/Kerollmops) in [#&#8203;6494](meilisearch/meilisearch#6494)

##### 🔩 Miscellaneous changes

- Add missing route descriptions for documentation by [@&#8203;curquiza](https://github.com/curquiza) in [#&#8203;6500](meilisearch/meilisearch#6500)
- Make the prototype docs clearer by [@&#8203;curquiza](https://github.com/curquiza) in [#&#8203;6503](meilisearch/meilisearch#6503)
- Improve maintenability by simplifying partitioning step by [@&#8203;ManyTheFish](https://github.com/ManyTheFish) in [#&#8203;6511](meilisearch/meilisearch#6511)
- Fix frequently failing tests on Windows by [@&#8203;dureuill](https://github.com/dureuill) in [#&#8203;6520](meilisearch/meilisearch#6520)

**Full Changelog**: <meilisearch/meilisearch@v1.49.0...v1.50.0>

</details>

---

### Configuration

📅 **Schedule**: (in timezone Europe/Warsaw)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNjUuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI2NS4yIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbInJlbm92YXRlL2NvbnRhaW5lciIsInR5cGUvbWlub3IiXX0=-->

Reviewed-on: https://git.ajgon.casa/deedee/mark13/pulls/378
ajgon pushed a commit to deedee-ops/home-ops that referenced this pull request Jul 20, 2026
#378)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [getmeili/meilisearch](https://github.com/meilisearch/meilisearch) | minor | `v1.49.0` → `v1.50.0` |

---

### Release Notes

<details>
<summary>meilisearch/meilisearch (getmeili/meilisearch)</summary>

### [`v1.50.0`](https://github.com/meilisearch/meilisearch/releases/tag/v1.50.0): 🐐

[Compare Source](meilisearch/meilisearch@v1.49.0...v1.50.0)

Meilisearch v1.50 revamps the [Dynamic Search Rules](https://www.meilisearch.com/docs/capabilities/search_rules/overview), adds support for federated document fetch in sharded configurations, among other improvements

##### Breaking changes

This release introduces breaking changes for users using some experimental features

##### `dynamicSearchRules` experimental feature

##### Request type changes

1. `priority` has been replaced with `precedence`, which better reflects the behavior (lower precedence means the rule is applied first)
2. `conditions` has been modified from an array to an object with two fields: "query" of type `QueryCondition` and "time" of time `TimeCondition`
3. New type `QueryCondition` that contains the fields `isEmpty` (as previously) and `words` instead of `contains` (same type)
4. It is now possible to pass `isEmpty: false` with `words` in a `QueryCondition`. Passing `isEmpty:true` with `words` still results in a synchronous error.
5. New type `TimeCondition` with fields `start` and `end` (unchanged semantics from previous type).
6. When specifying the `selector` of an `Action`, it is now mandatory to specify an `id`. Previously, it was optional, but the action would never trigger.
7. When listing rules with `POST /dynamic-search-rules`, `filter.attributePatterns` has been replaced with `filter.query`, an optional string that searches in rule `description` and `conditions.query.words`.
8. When calling `DELETE /dynamic-search-rules/{:ruleUid}` or `PATCH /dynamic-search-rules/{:ruleUid}` in a sharded configuration, endpoint will not return a HTTP 400 error if called on a follower remote rather than on the leader.

##### Response changes

1. `PATCH /dynamic-search-rules/{:ruleUid}` and `DELETE /dynamic-search-rules/{:ruleUid}` now register an asynchronous task..
2. The response is modified to return the registered task instead of the modified dynamic search rule.
3. HTTP 404 is no longer returned if the `{:ruleUid}` portion of the URL refers to a rule that doesn't exist. This is because rules are processed asynchronously, and is consistent with the behavior of `DELETE /indexes/{:indexUid}/documents/{:docId}` for `{:docId}`

##### `network` experimental feature

The default behavior for users using the network experimental feature with sharding configured (`leader` not `null`) will change on the following routes:

- **GET** `indexes/:uid/documents`
- **GET** `indexes/:uid/documents/:document_id`
- **POST** `indexes/:uid/documents/fetch`

Meilisearch will now fetch the documents from all the shards and not only on the local machine when processing the request.
To keep the same behavior as before, users will have to set `useNetwork` to `false` when making their request.

##### 🌈 Improvements

##### Scaling up the Dynamic Search Rules

- Dynamic search rules scale up to 75K rules without any impact on the search
- The API of Dynamic Search Rules has been simplified
  - It is harder to send conditions that will result in the rules never activating
- This also unlocks future improvements such as filter activation conditions for search rules

##### Additions

- Add a new `DELETE /dynamic-search-rule` route that deletes all the DSRs
- Add the concept of "DSR fuel" that determines how much energy is spent resolving DSR during a search. The fuel is initialized with some default variables that can be overridden using environment variables:
  - `MEILI_EXPERIMENTAL_DSR_FUEL_MAX_COUNTED_WORDS`: max number of words considered inside of a search query for the purpose of finding `conditions.query.words` constraints. Defaults to 10, max value is 255
  - `MEILI_EXPERIMENTAL_DSR_FUEL_MAX_ACTIVE_RULES`: max number of active rules whose actions are evaluated. Defaults to 1000, max value is [`4294967`](meilisearch/meilisearch@4294967295)
  - `MEILI_EXPERIMENTAL_DSR_FUEL_MAX_PIN_ACTIONS`: max number of pin actions that are applied. Defaults to 100, max value is [`4294967`](meilisearch/meilisearch@4294967295)
  - `MEILI_EXPERIMENTAL_DSR_FUEL_WORD_FUEL`: max number of constraint combinations that are evaluated for the purpose of finding `conditions.query.words` constraints. Defaults to 4096, max value is [`4294967`](meilisearch/meilisearch@4294967295)

By [@&#8203;dureuill](https://github.com/dureuill) in [#&#8203;6484](meilisearch/meilisearch#6484) and [#&#8203;6506](meilisearch/meilisearch#6506)

##### Behavior changes

- The `conditions.query.words` behaves differently from `query.contains`: previously, a rule would match if its conditions `query.contains` would be substrings of `q` in the search query in the sense of [`str::contains`](https://doc.rust-lang.org/std/primitive.str.html#method.contains). Now, a rule matches if all the words in `conditions.query.words` appear in `q` (after normalization). For `q = hero super`, `query.contains = super hero` would **not** match, whereas `conditions.query.words = super hero` does now match. This behavior is more in line with regular search, and allows improving performance.
- Dynamic search rules are now replicated from the leader to its follower, when in a sharded configuration

##### Federated document fetch routes

**GET** `indexes/:uid/documents`, **GET** `indexes/:uid/documents/:document_id` and **POST** `indexes/:uid/documents/fetch` will now fetch the documents from all the shards in the configured network.

Moreover, a new `useNetwork` parameter is available to activate or deactivate the usage of the network.

By [@&#8203;ManyTheFish](https://github.com/ManyTheFish) in [#&#8203;6495](meilisearch/meilisearch#6495)

##### Support partial wildcards when requesting facets

The `facets` parameter in search and federated search now supports more wildcards. Previously, only the single wildcard `"*"` was supported, requesting all filterable fields.

Now, patterns *containing* `*`  are supported with the same matching rules as in `filterableAttributes.attributePatterns` and `localizedAttributes.attributePatterns`, such as `dogs.*`, which will add to the facet distribution all filterable fields that match the pattern (such as `dogs.intel`, `dogs.kefir`, etc.).

By [@&#8203;Kerollmops](https://github.com/Kerollmops) in [#&#8203;6497](meilisearch/meilisearch#6497)

##### 🦋 Fixes

##### Fix migration from v1.48 and earlier

Migration via `--experimental-dumpless-upgrade` would fail in some cases in v1.49, when trying to migrate synonyms that contained no words (empty synonyms, or containing only separator tokens such as `&`).

Such synonyms are now ignored during migration, avoiding the issue.

By [@&#8203;Kerollmops](https://github.com/Kerollmops) in [#&#8203;6501](meilisearch/meilisearch#6501)

##### Fix filter memory consumption in some cases

In some conditions, the memory consumption of filters would increase quadratically with the length of the filter. This is now resolved for these cases.

By [@&#8203;ManyTheFish](https://github.com/ManyTheFish) in [#&#8203;6509](meilisearch/meilisearch#6509)

##### No longer reject some correctly-escaped filters

Fix a bug where some filters containing escaped characters (such as \\) would cause search requests to fail with invalid\_search\_filter

By [@&#8203;dureuill](https://github.com/dureuill) in [#&#8203;6499](meilisearch/meilisearch#6499)

##### More fault-tolerant S3 snapshots

*Potentially* fix an issue when sending a request to AWS S3 to create a new multipart upload, ensuring we resend the request if it fails.

By [@&#8203;Kerollmops](https://github.com/Kerollmops) in [#&#8203;6494](meilisearch/meilisearch#6494)

##### 🔩 Miscellaneous changes

- Add missing route descriptions for documentation by [@&#8203;curquiza](https://github.com/curquiza) in [#&#8203;6500](meilisearch/meilisearch#6500)
- Make the prototype docs clearer by [@&#8203;curquiza](https://github.com/curquiza) in [#&#8203;6503](meilisearch/meilisearch#6503)
- Improve maintenability by simplifying partitioning step by [@&#8203;ManyTheFish](https://github.com/ManyTheFish) in [#&#8203;6511](meilisearch/meilisearch#6511)
- Fix frequently failing tests on Windows by [@&#8203;dureuill](https://github.com/dureuill) in [#&#8203;6520](meilisearch/meilisearch#6520)

**Full Changelog**: <meilisearch/meilisearch@v1.49.0...v1.50.0>

</details>

---

### Configuration

📅 **Schedule**: (in timezone Europe/Warsaw)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNjUuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI2NS4yIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbInJlbm92YXRlL2NvbnRhaW5lciIsInR5cGUvbWlub3IiXX0=-->

Reviewed-on: https://git.ajgon.casa/deedee/mark13/pulls/378
ajgon pushed a commit to deedee-ops/home-ops that referenced this pull request Jul 20, 2026
#378)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [getmeili/meilisearch](https://github.com/meilisearch/meilisearch) | minor | `v1.49.0` → `v1.50.0` |

---

<details>
<summary>meilisearch/meilisearch (getmeili/meilisearch)</summary>

[Compare Source](meilisearch/meilisearch@v1.49.0...v1.50.0)

Meilisearch v1.50 revamps the [Dynamic Search Rules](https://www.meilisearch.com/docs/capabilities/search_rules/overview), adds support for federated document fetch in sharded configurations, among other improvements

This release introduces breaking changes for users using some experimental features

1. `priority` has been replaced with `precedence`, which better reflects the behavior (lower precedence means the rule is applied first)
2. `conditions` has been modified from an array to an object with two fields: "query" of type `QueryCondition` and "time" of time `TimeCondition`
3. New type `QueryCondition` that contains the fields `isEmpty` (as previously) and `words` instead of `contains` (same type)
4. It is now possible to pass `isEmpty: false` with `words` in a `QueryCondition`. Passing `isEmpty:true` with `words` still results in a synchronous error.
5. New type `TimeCondition` with fields `start` and `end` (unchanged semantics from previous type).
6. When specifying the `selector` of an `Action`, it is now mandatory to specify an `id`. Previously, it was optional, but the action would never trigger.
7. When listing rules with `POST /dynamic-search-rules`, `filter.attributePatterns` has been replaced with `filter.query`, an optional string that searches in rule `description` and `conditions.query.words`.
8. When calling `DELETE /dynamic-search-rules/{:ruleUid}` or `PATCH /dynamic-search-rules/{:ruleUid}` in a sharded configuration, endpoint will not return a HTTP 400 error if called on a follower remote rather than on the leader.

1. `PATCH /dynamic-search-rules/{:ruleUid}` and `DELETE /dynamic-search-rules/{:ruleUid}` now register an asynchronous task..
2. The response is modified to return the registered task instead of the modified dynamic search rule.
3. HTTP 404 is no longer returned if the `{:ruleUid}` portion of the URL refers to a rule that doesn't exist. This is because rules are processed asynchronously, and is consistent with the behavior of `DELETE /indexes/{:indexUid}/documents/{:docId}` for `{:docId}`

The default behavior for users using the network experimental feature with sharding configured (`leader` not `null`) will change on the following routes:

- **GET** `indexes/:uid/documents`
- **GET** `indexes/:uid/documents/:document_id`
- **POST** `indexes/:uid/documents/fetch`

Meilisearch will now fetch the documents from all the shards and not only on the local machine when processing the request.
To keep the same behavior as before, users will have to set `useNetwork` to `false` when making their request.

- Dynamic search rules scale up to 75K rules without any impact on the search
- The API of Dynamic Search Rules has been simplified
  - It is harder to send conditions that will result in the rules never activating
- This also unlocks future improvements such as filter activation conditions for search rules

- Add a new `DELETE /dynamic-search-rule` route that deletes all the DSRs
- Add the concept of "DSR fuel" that determines how much energy is spent resolving DSR during a search. The fuel is initialized with some default variables that can be overridden using environment variables:
  - `MEILI_EXPERIMENTAL_DSR_FUEL_MAX_COUNTED_WORDS`: max number of words considered inside of a search query for the purpose of finding `conditions.query.words` constraints. Defaults to 10, max value is 255
  - `MEILI_EXPERIMENTAL_DSR_FUEL_MAX_ACTIVE_RULES`: max number of active rules whose actions are evaluated. Defaults to 1000, max value is [`4294967`](meilisearch/meilisearch@4294967295)
  - `MEILI_EXPERIMENTAL_DSR_FUEL_MAX_PIN_ACTIONS`: max number of pin actions that are applied. Defaults to 100, max value is [`4294967`](meilisearch/meilisearch@4294967295)
  - `MEILI_EXPERIMENTAL_DSR_FUEL_WORD_FUEL`: max number of constraint combinations that are evaluated for the purpose of finding `conditions.query.words` constraints. Defaults to 4096, max value is [`4294967`](meilisearch/meilisearch@4294967295)

By [@&#8203;dureuill](https://github.com/dureuill) in [#&#8203;6484](meilisearch/meilisearch#6484) and [#&#8203;6506](meilisearch/meilisearch#6506)

- The `conditions.query.words` behaves differently from `query.contains`: previously, a rule would match if its conditions `query.contains` would be substrings of `q` in the search query in the sense of [`str::contains`](https://doc.rust-lang.org/std/primitive.str.html#method.contains). Now, a rule matches if all the words in `conditions.query.words` appear in `q` (after normalization). For `q = hero super`, `query.contains = super hero` would **not** match, whereas `conditions.query.words = super hero` does now match. This behavior is more in line with regular search, and allows improving performance.
- Dynamic search rules are now replicated from the leader to its follower, when in a sharded configuration

**GET** `indexes/:uid/documents`, **GET** `indexes/:uid/documents/:document_id` and **POST** `indexes/:uid/documents/fetch` will now fetch the documents from all the shards in the configured network.

Moreover, a new `useNetwork` parameter is available to activate or deactivate the usage of the network.

By [@&#8203;ManyTheFish](https://github.com/ManyTheFish) in [#&#8203;6495](meilisearch/meilisearch#6495)

The `facets` parameter in search and federated search now supports more wildcards. Previously, only the single wildcard `"*"` was supported, requesting all filterable fields.

Now, patterns *containing* `*`  are supported with the same matching rules as in `filterableAttributes.attributePatterns` and `localizedAttributes.attributePatterns`, such as `dogs.*`, which will add to the facet distribution all filterable fields that match the pattern (such as `dogs.intel`, `dogs.kefir`, etc.).

By [@&#8203;Kerollmops](https://github.com/Kerollmops) in [#&#8203;6497](meilisearch/meilisearch#6497)

Migration via `--experimental-dumpless-upgrade` would fail in some cases in v1.49, when trying to migrate synonyms that contained no words (empty synonyms, or containing only separator tokens such as `&`).

Such synonyms are now ignored during migration, avoiding the issue.

By [@&#8203;Kerollmops](https://github.com/Kerollmops) in [#&#8203;6501](meilisearch/meilisearch#6501)

In some conditions, the memory consumption of filters would increase quadratically with the length of the filter. This is now resolved for these cases.

By [@&#8203;ManyTheFish](https://github.com/ManyTheFish) in [#&#8203;6509](meilisearch/meilisearch#6509)

Fix a bug where some filters containing escaped characters (such as \\) would cause search requests to fail with invalid\_search\_filter

By [@&#8203;dureuill](https://github.com/dureuill) in [#&#8203;6499](meilisearch/meilisearch#6499)

*Potentially* fix an issue when sending a request to AWS S3 to create a new multipart upload, ensuring we resend the request if it fails.

By [@&#8203;Kerollmops](https://github.com/Kerollmops) in [#&#8203;6494](meilisearch/meilisearch#6494)

- Add missing route descriptions for documentation by [@&#8203;curquiza](https://github.com/curquiza) in [#&#8203;6500](meilisearch/meilisearch#6500)
- Make the prototype docs clearer by [@&#8203;curquiza](https://github.com/curquiza) in [#&#8203;6503](meilisearch/meilisearch#6503)
- Improve maintenability by simplifying partitioning step by [@&#8203;ManyTheFish](https://github.com/ManyTheFish) in [#&#8203;6511](meilisearch/meilisearch#6511)
- Fix frequently failing tests on Windows by [@&#8203;dureuill](https://github.com/dureuill) in [#&#8203;6520](meilisearch/meilisearch#6520)

**Full Changelog**: <meilisearch/meilisearch@v1.49.0...v1.50.0>

</details>

---

📅 **Schedule**: (in timezone Europe/Warsaw)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNjUuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI2NS4yIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbInJlbm92YXRlL2NvbnRhaW5lciIsInR5cGUvbWlub3IiXX0=-->

Reviewed-on: https://git.ajgon.casa/deedee/mark13/pulls/378
doonga pushed a commit to greyrock-labs/home-ops that referenced this pull request Jul 21, 2026
… ➔ v1.50.0) (#115)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [docker.io/getmeili/meilisearch](https://github.com/meilisearch/meilisearch) | minor | `v1.49.0` → `v1.50.0` |

---

### Release Notes

<details>
<summary>meilisearch/meilisearch (docker.io/getmeili/meilisearch)</summary>

### [`v1.50.0`](https://github.com/meilisearch/meilisearch/releases/tag/v1.50.0): 🐐

[Compare Source](meilisearch/meilisearch@v1.49.0...v1.50.0)

Meilisearch v1.50 revamps the [Dynamic Search Rules](https://www.meilisearch.com/docs/capabilities/search_rules/overview), adds support for federated document fetch in sharded configurations, among other improvements

##### Breaking changes

This release introduces breaking changes for users using some experimental features

##### `dynamicSearchRules` experimental feature

##### Request type changes

1. `priority` has been replaced with `precedence`, which better reflects the behavior (lower precedence means the rule is applied first)
2. `conditions` has been modified from an array to an object with two fields: "query" of type `QueryCondition` and "time" of time `TimeCondition`
3. New type `QueryCondition` that contains the fields `isEmpty` (as previously) and `words` instead of `contains` (same type)
4. It is now possible to pass `isEmpty: false` with `words` in a `QueryCondition`. Passing `isEmpty:true` with `words` still results in a synchronous error.
5. New type `TimeCondition` with fields `start` and `end` (unchanged semantics from previous type).
6. When specifying the `selector` of an `Action`, it is now mandatory to specify an `id`. Previously, it was optional, but the action would never trigger.
7. When listing rules with `POST /dynamic-search-rules`, `filter.attributePatterns` has been replaced with `filter.query`, an optional string that searches in rule `description` and `conditions.query.words`.
8. When calling `DELETE /dynamic-search-rules/{:ruleUid}` or `PATCH /dynamic-search-rules/{:ruleUid}` in a sharded configuration, endpoint will not return a HTTP 400 error if called on a follower remote rather than on the leader.

##### Response changes

1. `PATCH /dynamic-search-rules/{:ruleUid}` and `DELETE /dynamic-search-rules/{:ruleUid}` now register an asynchronous task..
2. The response is modified to return the registered task instead of the modified dynamic search rule.
3. HTTP 404 is no longer returned if the `{:ruleUid}` portion of the URL refers to a rule that doesn't exist. This is because rules are processed asynchronously, and is consistent with the behavior of `DELETE /indexes/{:indexUid}/documents/{:docId}` for `{:docId}`

##### `network` experimental feature

The default behavior for users using the network experimental feature with sharding configured (`leader` not `null`) will change on the following routes:

- **GET** `indexes/:uid/documents`
- **GET** `indexes/:uid/documents/:document_id`
- **POST** `indexes/:uid/documents/fetch`

Meilisearch will now fetch the documents from all the shards and not only on the local machine when processing the request.
To keep the same behavior as before, users will have to set `useNetwork` to `false` when making their request.

##### 🌈 Improvements

##### Scaling up the Dynamic Search Rules

- Dynamic search rules scale up to 75K rules without any impact on the search
- The API of Dynamic Search Rules has been simplified
  - It is harder to send conditions that will result in the rules never activating
- This also unlocks future improvements such as filter activation conditions for search rules

##### Additions

- Add a new `DELETE /dynamic-search-rule` route that deletes all the DSRs
- Add the concept of "DSR fuel" that determines how much energy is spent resolving DSR during a search. The fuel is initialized with some default variables that can be overridden using environment variables:
  - `MEILI_EXPERIMENTAL_DSR_FUEL_MAX_COUNTED_WORDS`: max number of words considered inside of a search query for the purpose of finding `conditions.query.words` constraints. Defaults to 10, max value is 255
  - `MEILI_EXPERIMENTAL_DSR_FUEL_MAX_ACTIVE_RULES`: max number of active rules whose actions are evaluated. Defaults to 1000, max value is [`4294967`](meilisearch/meilisearch@4294967295)
  - `MEILI_EXPERIMENTAL_DSR_FUEL_MAX_PIN_ACTIONS`: max number of pin actions that are applied. Defaults to 100, max value is [`4294967`](meilisearch/meilisearch@4294967295)
  - `MEILI_EXPERIMENTAL_DSR_FUEL_WORD_FUEL`: max number of constraint combinations that are evaluated for the purpose of finding `conditions.query.words` constraints. Defaults to 4096, max value is [`4294967`](meilisearch/meilisearch@4294967295)

By [@&#8203;dureuill](https://github.com/dureuill) in [#&#8203;6484](meilisearch/meilisearch#6484) and [#&#8203;6506](meilisearch/meilisearch#6506)

##### Behavior changes

- The `conditions.query.words` behaves differently from `query.contains`: previously, a rule would match if its conditions `query.contains` would be substrings of `q` in the search query in the sense of [`str::contains`](https://doc.rust-lang.org/std/primitive.str.html#method.contains). Now, a rule matches if all the words in `conditions.query.words` appear in `q` (after normalization). For `q = hero super`, `query.contains = super hero` would **not** match, whereas `conditions.query.words = super hero` does now match. This behavior is more in line with regular search, and allows improving performance.
- Dynamic search rules are now replicated from the leader to its follower, when in a sharded configuration

##### Federated document fetch routes

**GET** `indexes/:uid/documents`, **GET** `indexes/:uid/documents/:document_id` and **POST** `indexes/:uid/documents/fetch` will now fetch the documents from all the shards in the configured network.

Moreover, a new `useNetwork` parameter is available to activate or deactivate the usage of the network.

By [@&#8203;ManyTheFish](https://github.com/ManyTheFish) in [#&#8203;6495](meilisearch/meilisearch#6495)

##### Support partial wildcards when requesting facets

The `facets` parameter in search and federated search now supports more wildcards. Previously, only the single wildcard `"*"` was supported, requesting all filterable fields.

Now, patterns *containing* `*`  are supported with the same matching rules as in `filterableAttributes.attributePatterns` and `localizedAttributes.attributePatterns`, such as `dogs.*`, which will add to the facet distribution all filterable fields that match the pattern (such as `dogs.intel`, `dogs.kefir`, etc.).

By [@&#8203;Kerollmops](https://github.com/Kerollmops) in [#&#8203;6497](meilisearch/meilisearch#6497)

##### 🦋 Fixes

##### Fix migration from v1.48 and earlier

Migration via `--experimental-dumpless-upgrade` would fail in some cases in v1.49, when trying to migrate synonyms that contained no words (empty synonyms, or containing only separator tokens such as `&`).

Such synonyms are now ignored during migration, avoiding the issue.

By [@&#8203;Kerollmops](https://github.com/Kerollmops) in [#&#8203;6501](meilisearch/meilisearch#6501)

##### Fix filter memory consumption in some cases

In some conditions, the memory consumption of filters would increase quadratically with the length of the filter. This is now resolved for these cases.

By [@&#8203;ManyTheFish](https://github.com/ManyTheFish) in [#&#8203;6509](meilisearch/meilisearch#6509)

##### No longer reject some correctly-escaped filters

Fix a bug where some filters containing escaped characters (such as \\) would cause search requests to fail with invalid\_search\_filter

By [@&#8203;dureuill](https://github.com/dureuill) in [#&#8203;6499](meilisearch/meilisearch#6499)

##### More fault-tolerant S3 snapshots

*Potentially* fix an issue when sending a request to AWS S3 to create a new multipart upload, ensuring we resend the request if it fails.

By [@&#8203;Kerollmops](https://github.com/Kerollmops) in [#&#8203;6494](meilisearch/meilisearch#6494)

##### 🔩 Miscellaneous changes

- Add missing route descriptions for documentation by [@&#8203;curquiza](https://github.com/curquiza) in [#&#8203;6500](meilisearch/meilisearch#6500)
- Make the prototype docs clearer by [@&#8203;curquiza](https://github.com/curquiza) in [#&#8203;6503](meilisearch/meilisearch#6503)
- Improve maintenability by simplifying partitioning step by [@&#8203;ManyTheFish](https://github.com/ManyTheFish) in [#&#8203;6511](meilisearch/meilisearch#6511)
- Fix frequently failing tests on Windows by [@&#8203;dureuill](https://github.com/dureuill) in [#&#8203;6520](meilisearch/meilisearch#6520)

**Full Changelog**: <meilisearch/meilisearch@v1.49.0...v1.50.0>

</details>

---

### Configuration

📅 **Schedule**: (in timezone America/New_York)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNzIuMSIsInVwZGF0ZWRJblZlciI6IjQzLjI3Mi4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL21pbm9yIl19-->

Reviewed-on: https://git.greyrock.io/greyrock-labs/home-ops/pulls/115
ajgon pushed a commit to deedee-ops/home-ops that referenced this pull request Jul 28, 2026
#378)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [getmeili/meilisearch](https://github.com/meilisearch/meilisearch) | minor | `v1.49.0` → `v1.50.0` |

---

<details>
<summary>meilisearch/meilisearch (getmeili/meilisearch)</summary>

[Compare Source](meilisearch/meilisearch@v1.49.0...v1.50.0)

Meilisearch v1.50 revamps the [Dynamic Search Rules](https://www.meilisearch.com/docs/capabilities/search_rules/overview), adds support for federated document fetch in sharded configurations, among other improvements

This release introduces breaking changes for users using some experimental features

1. `priority` has been replaced with `precedence`, which better reflects the behavior (lower precedence means the rule is applied first)
2. `conditions` has been modified from an array to an object with two fields: "query" of type `QueryCondition` and "time" of time `TimeCondition`
3. New type `QueryCondition` that contains the fields `isEmpty` (as previously) and `words` instead of `contains` (same type)
4. It is now possible to pass `isEmpty: false` with `words` in a `QueryCondition`. Passing `isEmpty:true` with `words` still results in a synchronous error.
5. New type `TimeCondition` with fields `start` and `end` (unchanged semantics from previous type).
6. When specifying the `selector` of an `Action`, it is now mandatory to specify an `id`. Previously, it was optional, but the action would never trigger.
7. When listing rules with `POST /dynamic-search-rules`, `filter.attributePatterns` has been replaced with `filter.query`, an optional string that searches in rule `description` and `conditions.query.words`.
8. When calling `DELETE /dynamic-search-rules/{:ruleUid}` or `PATCH /dynamic-search-rules/{:ruleUid}` in a sharded configuration, endpoint will not return a HTTP 400 error if called on a follower remote rather than on the leader.

1. `PATCH /dynamic-search-rules/{:ruleUid}` and `DELETE /dynamic-search-rules/{:ruleUid}` now register an asynchronous task..
2. The response is modified to return the registered task instead of the modified dynamic search rule.
3. HTTP 404 is no longer returned if the `{:ruleUid}` portion of the URL refers to a rule that doesn't exist. This is because rules are processed asynchronously, and is consistent with the behavior of `DELETE /indexes/{:indexUid}/documents/{:docId}` for `{:docId}`

The default behavior for users using the network experimental feature with sharding configured (`leader` not `null`) will change on the following routes:

- **GET** `indexes/:uid/documents`
- **GET** `indexes/:uid/documents/:document_id`
- **POST** `indexes/:uid/documents/fetch`

Meilisearch will now fetch the documents from all the shards and not only on the local machine when processing the request.
To keep the same behavior as before, users will have to set `useNetwork` to `false` when making their request.

- Dynamic search rules scale up to 75K rules without any impact on the search
- The API of Dynamic Search Rules has been simplified
  - It is harder to send conditions that will result in the rules never activating
- This also unlocks future improvements such as filter activation conditions for search rules

- Add a new `DELETE /dynamic-search-rule` route that deletes all the DSRs
- Add the concept of "DSR fuel" that determines how much energy is spent resolving DSR during a search. The fuel is initialized with some default variables that can be overridden using environment variables:
  - `MEILI_EXPERIMENTAL_DSR_FUEL_MAX_COUNTED_WORDS`: max number of words considered inside of a search query for the purpose of finding `conditions.query.words` constraints. Defaults to 10, max value is 255
  - `MEILI_EXPERIMENTAL_DSR_FUEL_MAX_ACTIVE_RULES`: max number of active rules whose actions are evaluated. Defaults to 1000, max value is [`4294967`](meilisearch/meilisearch@4294967295)
  - `MEILI_EXPERIMENTAL_DSR_FUEL_MAX_PIN_ACTIONS`: max number of pin actions that are applied. Defaults to 100, max value is [`4294967`](meilisearch/meilisearch@4294967295)
  - `MEILI_EXPERIMENTAL_DSR_FUEL_WORD_FUEL`: max number of constraint combinations that are evaluated for the purpose of finding `conditions.query.words` constraints. Defaults to 4096, max value is [`4294967`](meilisearch/meilisearch@4294967295)

By [@&#8203;dureuill](https://github.com/dureuill) in [#&#8203;6484](meilisearch/meilisearch#6484) and [#&#8203;6506](meilisearch/meilisearch#6506)

- The `conditions.query.words` behaves differently from `query.contains`: previously, a rule would match if its conditions `query.contains` would be substrings of `q` in the search query in the sense of [`str::contains`](https://doc.rust-lang.org/std/primitive.str.html#method.contains). Now, a rule matches if all the words in `conditions.query.words` appear in `q` (after normalization). For `q = hero super`, `query.contains = super hero` would **not** match, whereas `conditions.query.words = super hero` does now match. This behavior is more in line with regular search, and allows improving performance.
- Dynamic search rules are now replicated from the leader to its follower, when in a sharded configuration

**GET** `indexes/:uid/documents`, **GET** `indexes/:uid/documents/:document_id` and **POST** `indexes/:uid/documents/fetch` will now fetch the documents from all the shards in the configured network.

Moreover, a new `useNetwork` parameter is available to activate or deactivate the usage of the network.

By [@&#8203;ManyTheFish](https://github.com/ManyTheFish) in [#&#8203;6495](meilisearch/meilisearch#6495)

The `facets` parameter in search and federated search now supports more wildcards. Previously, only the single wildcard `"*"` was supported, requesting all filterable fields.

Now, patterns *containing* `*`  are supported with the same matching rules as in `filterableAttributes.attributePatterns` and `localizedAttributes.attributePatterns`, such as `dogs.*`, which will add to the facet distribution all filterable fields that match the pattern (such as `dogs.intel`, `dogs.kefir`, etc.).

By [@&#8203;Kerollmops](https://github.com/Kerollmops) in [#&#8203;6497](meilisearch/meilisearch#6497)

Migration via `--experimental-dumpless-upgrade` would fail in some cases in v1.49, when trying to migrate synonyms that contained no words (empty synonyms, or containing only separator tokens such as `&`).

Such synonyms are now ignored during migration, avoiding the issue.

By [@&#8203;Kerollmops](https://github.com/Kerollmops) in [#&#8203;6501](meilisearch/meilisearch#6501)

In some conditions, the memory consumption of filters would increase quadratically with the length of the filter. This is now resolved for these cases.

By [@&#8203;ManyTheFish](https://github.com/ManyTheFish) in [#&#8203;6509](meilisearch/meilisearch#6509)

Fix a bug where some filters containing escaped characters (such as \\) would cause search requests to fail with invalid\_search\_filter

By [@&#8203;dureuill](https://github.com/dureuill) in [#&#8203;6499](meilisearch/meilisearch#6499)

*Potentially* fix an issue when sending a request to AWS S3 to create a new multipart upload, ensuring we resend the request if it fails.

By [@&#8203;Kerollmops](https://github.com/Kerollmops) in [#&#8203;6494](meilisearch/meilisearch#6494)

- Add missing route descriptions for documentation by [@&#8203;curquiza](https://github.com/curquiza) in [#&#8203;6500](meilisearch/meilisearch#6500)
- Make the prototype docs clearer by [@&#8203;curquiza](https://github.com/curquiza) in [#&#8203;6503](meilisearch/meilisearch#6503)
- Improve maintenability by simplifying partitioning step by [@&#8203;ManyTheFish](https://github.com/ManyTheFish) in [#&#8203;6511](meilisearch/meilisearch#6511)
- Fix frequently failing tests on Windows by [@&#8203;dureuill](https://github.com/dureuill) in [#&#8203;6520](meilisearch/meilisearch#6520)

**Full Changelog**: <meilisearch/meilisearch@v1.49.0...v1.50.0>

</details>

---

📅 **Schedule**: (in timezone Europe/Warsaw)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNjUuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI2NS4yIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbInJlbm92YXRlL2NvbnRhaW5lciIsInR5cGUvbWlub3IiXX0=-->

Reviewed-on: https://git.ajgon.casa/deedee/mark13/pulls/378
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

maintenance no db change The database didn't change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants