What's new in v0.26

In this article, let's take a look at some of the most significant changes in Meilisearch's latest update. You can check out the full changelog here.

New feature: tenant tokens

In software development, multitenancy means that multiple users—also called tenants—share the same computing resources but have different levels of access to system-wide data. In Meilisearch, you might have one index containing data belonging to many distinct tenants.

Tenant tokens are small packages of encrypted data containing security credentials and a set of search rules. These search rules effectively limit what documents a search query can return. For example, you might use tokens to ensure users of a healthcare application can only search through their own medical records, even when all records are stored in the same index.

To start using tenant tokens, set up a token generation process in your application's back-end:

const currentUserID = 'aUserID';

const searchRules = {
  'patient_medical_records': {
    filter: `user_id = ${currentUserID}`
  }
};

const apiKey = 'yourApiKey';

const expiresAt = new Date('2025-12-20'); // optional

const token = client.generateTenantToken(searchRules, {
  apiKey: apiKey,
  expiresAt: expiresAt,
});

After you have created your tenant token, you can send it to your end-user's front-end and use it to query an index:

const frontEndClient = new MeiliSearch({ host: 'http://127.0.0.1:7700', apiKey: token });
frontEndClient.index('patient_medical_records').search('blood test');

You can read more about multitenancy and how to implement tenant tokens in your application in our dedicated guide.

Experimental feature: auto-batching

When it comes to improving Meilisearch's indexation performance, we have often recommended users to split their documents into batches. However, finding the right batch size can present an additional challenge. On the one hand, large batches use a lot of resources; on the other, small batches are significantly slower. We know we can do better than this.

In this release, we are introducing an experimental auto-batching feature. Auto-batching will help you improve indexing speed by automatically batching together consecutive document additions.

You can activate auto-batching by passing the --enable-auto-batching flag when launching Meilisearch:

./meilisearch --enable-auto-batching

We are very hopeful that this feature will make Meilisearch indexation faster and easier to use. You can read more about auto-batching on our documentation website.

We decided to ship it in an experimental state since this feature may be heavily reworked. We need your feedback to measure its success and make it evolve.

Breaking change: new dump behavior

Importing a dump into an instance with an existing database will throw an error and Meilisearch will not launch. Prior to v0.26 the import only failed silently and gave no indication anything had gone wrong.

./meilisearch --import-dump path_to_dump_file

If necessary for your workflow, you can use two new command-line flags to suppress import errors: --ignore-dump-if-db-exists and --ignore-missing-dump.

Breaking change: command-line flag behavior

Starting with v0.26, the following instance options no longer accept values when used in the command-line: -no-analytics, --schedule-snapshot, --ignore-missing-snapshot, --ignore-snapshot-if-db-exists, --ssl-require-auth, --ssl-resumption, and --ssl-tickets.

# new behavior
meilisearch --no-analytics

# old behavior
meilisearch --no-analytics=true

A value is still required when using these options as environment variables.

Other changes

  • Empty CSV cells are now converted to null values
  • Valid but empty payloads no longer throw errors when adding and updating documents
  • armv8 binaries are deprecated in favour of aarch64 binaries
  • Improved highlighting for searches containing non-unicode characters
  • Improved _geoPoint sorting behavior

Contributors

Thank you very much to the contributors that helped us out! We want to give a special shout-out to @robjtede, @Thearas, and @Samyak2—we're humbled by your effort and generosity.


And that's all folks! Remember to check out the changelog on GitHub for the full release notes and see you soon for v0.27!