We have just released our new version which development has been driven by our desire for simplicity of use.

We realized that some features were not easy to use because of design choices. The whole team gathered around the table and debated the API routes and their RESTfulness until everyone agreed on a proposal. We hope to strike a good balance between simplicity and customization.

So what is new in the v0.9?

  • Schema deletion!
  • Included web interface to try out your search
  • New settings handling
  • Simplified custom ranking rules
  • Added primary key
  • New built-in ranking rule names
  • Simplified authentication
  • Production and development mode
  • Bug fixes, syntax changes and, improvements

Schemaless

The schemaless idea was in our mind for quite a while. When getting started, the user shouldn’t be required to specify how MeiliSearch should handle every field, but only when their needs are really specific and out of the ordinary.
Now, by default, MeiliSearch will display every documents field, make them all searchable and will infer the document's primary key based on the provided documents structure.
This solution causes way less friction when starting using MeiliSearch.

Web Interface

In the previous version, once you had started your MeiliSearch engine and inserted some documents into it, the smooth experience stopped there. In order to try out the search, you had to either submit requests using curl or an SDK, either creating a front-end search bar connected to MeiliSearch.

Now that a web interface is shipped with MeiliSearch, all you need to do is open your web browser and enter MeiliSearch’s address to visit it locally. This will lead you to a web page with a search bar that will allow you to search in a selected index.

movies_web_2-1

Since the production environment requires an API-key for searching, the web interface is only available in development mode.

Settings

Anything that isn’t necessary to make your MeiliSearch instance up and running can now be configured in the settings.

For each setting there is a route, thus making it possible to only update a specific setting. The global setting route gives you the possibility to post a configuration file describing your customizations, which will facilitate the creation of similar MeiliSearch instances based on the same settings.

Example

{
  "rankingRules": [
      "typo",
      "words",
      "proximity",
      "attribute",
      "wordsPosition",
      "exactness",
      "desc(release_date)"
  ],
  "distinctAttribute": null,
  "searchableAttributes": [
      "title",
      "description",
      "uid"
  ],
  "displayedAttributes": [
      "title",
      "description",
      "release_date",
      "rank",
      "poster"
  ],
  "stopWords": null,
  "synonyms": {
      "wolverine": ["xmen", "logan"],
      "logan": ["wolverine", "xmen"]
  },
  "indexNewFields": false
}

All the settings can be found here

Simplified Custom Ranking Rules

In the previous version, creating your own rules could be confusing. We simplified this task! All you have to do now is add an ascending (asc()) or descending (desc()) rule on one of your fields in the ranking rules list.

 "rankingRules": [
      "typo",
      "words",
      "proximity",
      "attribute",
      "wordsPosition",
      "exactness",
      "desc(release_date)"
  ]

If you update your ranking rules following this example, you will note that your changes have been taken into account by MeiliSearch immediately. This means that once all the other rules have been applied, MeiliSearch will consider documents with more recent release_date's more relevant than older ones.

Primary Key

MeiliSearch will try to infer the primary key from the documents you upload. This inference will search for the first field containing the string id in its attribute.
Sometimes, it may happen that no key can be found. In such a case, MeiliSearch is not able to infer it.

Since MeiliSearch needs a primary key to store the documents, if the latter cannot be inferred, we have set up two alternative ways to communicate the primary key to MeiliSearch.

  • By giving it on index creation :
    {
        "uid": "movies",
        "primaryKey": "movieUniqueName"
    }
    
  • By giving it on document addition
    $ curl -X POST 'http://localhost:7700/indexes/movies/documents?primaryKey=movieUniqueName' --data @movies.json
    
    

New Ranking Rules Names

In the previous versions, ranking rules names were too long and could contain unnecessary special characters. From now on, they have been simplified. Here is the list of the new built-in ranking rules:

  • typo
  • words
  • proximity
  • attribute
  • wordsPosition
  • exactness

Follow this guide to know more about what each ranking rules does.

Simplified Authentication

When adding a master key to MeiliSearch, a private key and a public key are generated on launch.
The public key only grants permission to the routes that execute searches and get documents.
The private key grants access to every other route in MeiliSearch except for the GET /keys route. As it returns both the public and private keys, this route is accessible only with the master key.

Read this to learn more about authentication in MeiliSearch.

Production and Development mode

When launching your MeiliSearch instance, setting the environment is now available as an option.
By default, the environment is set to development mode.

While in development mode, you don't have to provide a master key. In that case, every route is accessible without requiring any API key. You are also able to access the web interface.

While in production mode, if no master key is given, the instance will be considered unsafe for production and will not start.

Bug Fixes, Syntax Changes, and Improvements

  • Removed dead-lock in the update system
  • Settings can be added even when no primary key is known
  • POST /documents/delete changed to POST /documents/delete-batch
  • Speed up the reindexing system
  • When no highlight is prompted during search there will be no _highlighted field in the returned documents
  • Removed searchableAttributes from the search query parameters.
  • To know the stats of an index the route is now: GET /indexes/:index_uid/stats and not GET /stats/:index_uid
  • Documents ids' can only contain the following characters: A-Z a-z 0-9, -, and _

Some adjustments on routes’ design we made are temporary choices we took in order to release a working version. The /key route, for example, although functional, is too simple and not tailored to developers’ common needs. We are currently thinking about how to handle it better, and we are open to any advice!

This version took us about three months to finish, taking into account that the v0.8.5 has not been officially released but added to the v0.9 release. We did a lot of work on process organization to ensure that everything would be ready at the same time: the core MeiliSearch, the documentation, and the SDK.

We are thrilled about how these latest changes will improve the users' experience with MeiliSearch. This release is the result of a lot of discussions among our contributors and us. We are eager to hear about your experience with MeiliSearch. Any suggestion or feedback is more than welcome since those are the premises of a long-term and ambitious project that will be built upon the decisions we make today.