Lightning Fast, Ultra Relevant, and Typo-Tolerant Search Engine

Overview

MeiliSearch

MeiliSearch

Website | Roadmap | Blog | LinkedIn | Twitter | Documentation | FAQ

Build Status Dependency status License Slack Bors enabled

Lightning Fast, Ultra Relevant, and Typo-Tolerant Search Engine 🔍

MeiliSearch is a powerful, fast, open-source, easy to use and deploy search engine. Both searching and indexing are highly customizable. Features such as typo-tolerance, filters, and synonyms are provided out-of-the-box. For more information about features go to our documentation.

Web interface gif

Features

  • Search as-you-type experience (answers < 50 milliseconds)
  • Full-text search
  • Typo tolerant (understands typos and miss-spelling)
  • Faceted search and filters
  • Supports Kanji characters
  • Supports Synonym
  • Easy to install, deploy, and maintain
  • Whole documents are returned
  • Highly customizable
  • RESTful API

Getting started

Deploy the Server

Homebrew (Mac OS)

brew update && brew install meilisearch
meilisearch

Docker

docker run -p 7700:7700 -v $(pwd)/data.ms:/data.ms getmeili/meilisearch

Try MeiliSearch in our Sandbox

Create a MeiliSearch instance in MeiliSearch Sandbox. This instance is free, and will be active for 72 hours.

Run on Digital Ocean

DigitalOcean Marketplace

Deploy on Platform.sh

Deploy on Platform.sh

APT (Debian & Ubuntu)

echo "deb [trusted=yes] https://apt.fury.io/meilisearch/ /" > /etc/apt/sources.list.d/fury.list
apt update && apt install meilisearch-http
meilisearch

Download the binary (Linux & Mac OS)

curl -L https://install.meilisearch.com | sh
./meilisearch

Compile and run it from sources

If you have the latest stable Rust toolchain installed on your local system, clone the repository and change it to your working directory.

git clone https://github.com/meilisearch/MeiliSearch.git
cd MeiliSearch
cargo run --release

Create an Index and Upload Some Documents

Let's create an index! If you need a sample dataset, use this movie database. You can also find it in the datasets/ directory.

curl -L 'https://bit.ly/2PAcw9l' -o movies.json

MeiliSearch can serve multiple indexes, with different kinds of documents. It is required to create an index before sending documents to it.

curl -i -X POST 'http://127.0.0.1:7700/indexes' --data '{ "name": "Movies", "uid": "movies" }'

Now that the server knows about your brand new index, you're ready to send it some data.

curl -i -X POST 'http://127.0.0.1:7700/indexes/movies/documents' \
  --header 'content-type: application/json' \
  --data-binary @movies.json

Search for Documents

In command line

The search engine is now aware of your documents and can serve those via an HTTP server.

The jq command-line tool can greatly help you read the server responses.

curl 'http://127.0.0.1:7700/indexes/movies/search?q=botman+robin&limit=2' | jq
{
  "hits": [
    {
      "id": "415",
      "title": "Batman & Robin",
      "poster": "https://image.tmdb.org/t/p/w1280/79AYCcxw3kSKbhGpx1LiqaCAbwo.jpg",
      "overview": "Along with crime-fighting partner Robin and new recruit Batgirl...",
      "release_date": "1997-06-20",
    },
    {
      "id": "411736",
      "title": "Batman: Return of the Caped Crusaders",
      "poster": "https://image.tmdb.org/t/p/w1280/GW3IyMW5Xgl0cgCN8wu96IlNpD.jpg",
      "overview": "Adam West and Burt Ward returns to their iconic roles of Batman and Robin...",
      "release_date": "2016-10-08",
    }
  ],
  "offset": 0,
  "limit": 2,
  "processingTimeMs": 1,
  "query": "botman robin"
}

Use the Web Interface

We also deliver an out-of-the-box web interface in which you can test MeiliSearch interactively.

You can access the web interface in your web browser at the root of the server. The default URL is http://127.0.0.1:7700. All you need to do is open your web browser and enter MeiliSearch’s address to visit it. This will lead you to a web page with a search bar that will allow you to search in the selected index.

| See the gif above

Documentation

Now that your MeiliSearch server is up and running, you can learn more about how to tune your search engine in the documentation.

Contributing

Hey! We're glad you're thinking about contributing to MeiliSearch! If you think something is missing or could be improved, please open issues and pull requests. If you'd like to help this project grow, we'd love to have you! To start contributing, checking issues tagged as "good-first-issue" is a good start!

Telemetry

MeiliSearch collects anonymous data regarding general usage. This helps us better understand developers' usage of MeiliSearch features.

To see what information we're retrieving, please see the complete list on the dedicated issue.

We also use Sentry to make us crash and error reports. If you want to know more about what Sentry collects, please visit their privacy policy website.

This program is optional, you can disable these analytics by using the MEILI_NO_ANALYTICS env variable.

💌 Contact

Feel free to contact us with any questions you may have:

MeiliSearch is developed by Meili, a young company. To know more about us, you can read our blog. Any suggestion or feedback is highly appreciated. Thank you for your support!

Comments
  • Using Docker, Meilisearch v0.24 does not write data in /data.ms anymore

    Using Docker, Meilisearch v0.24 does not write data in /data.ms anymore

    Describe the bug Following the docs in Getting Started / Installation / Download and launch / Docker, it says that Meilisearch write data in /data.ms. When new user try it with Docker using persistence volume, they will use -v $(pwd)/data.ms:/data.ms. But looking inside the folder, they will find no data.

    To Reproduce Steps to reproduce the behavior:

    1. Go to https://docs.meilisearch.com/learn/getting_started/installation.html#download-and-launch
    2. Click on 'Docker' tab
    3. Copy/Paste the command to start using meilisearch
    4. Check your $(pwd)/data.ms folder on your host machine
    5. No data is persist

    Expected behavior Data appears in the right folder of the host machine

    MeiliSearch version: v0.24

    Additional context When changing user https://github.com/meilisearch/MeiliSearch/issues/1757 the workspace dir has also changed. It is no more /data.ms but /home/meili/data.ms

    We could update the documentation or remove the WORDIR ${HOME} and let it be in /data.ms

    bug impacts docs v0.25.0 
    opened by sovanna 46
  • The attribute does not work attributesToHighlight

    The attribute does not work attributesToHighlight

    Hello everyone! The word highlighting function in meilisearch does not work. Please help me solve this issue.

     public function __invoke (Request $request){
            
            $rubric  = Category::select('id', 'title')->where('type', 0)->get()->sortBy('title');
            $query = $request['query'];
            $post = Post::search($query,  function($meilisearch, $query, $options) use ($request){
                $date = strtotime(now());
                
                if(empty($request->rubric))
                {
                    $options['filters'] = "status = 1";
                }
                else
                {
                    $options['filters'] = "status = 1 AND (category_id = $request->rubric)";
                    $options['attributesToHighlight'] = ['title', 'excerpt'];
                }
               
                return $meilisearch->search($query,$options );
            } )
            ->paginate(10);
    
            $modelCollection =  $post->load('category');
          
            return view('search.index', compact('post', 'request', 'rubric'));
        }
    
    needs more info support 
    opened by Sliper959595 42
  • Meilisearch slow on updates, backlogged/behind by 30-50min

    Meilisearch slow on updates, backlogged/behind by 30-50min

    Describe the bug Not sure if meilisearch has been benchmarked by large scale apps as i have tried to find evidence of other users and most implementations talk about the size of the data and not the frequency of updates. I work on an app doing 40k+ DAUs and while search query perf is good. Updating index on single events like 'a user starring/liking a post' is not good. The index gets backlogged and is behind by 30-50min. I have tried many ways to optimize:

    • use sqs queue
    • give meilisearch its own cpu-optimize vm... its now only doing 20% load on the vm, so its not even using the resources effectively
    • minimize attributes, we have less than 10
    • minimize payload size, less than 1mb

    To Reproduce Will be tough to repro as you need to be running meili under high load from many clients.

    Expected behavior I would be fine if it was 5-10min behind in events, but almost 1 hour behind is too much to cause user confusion on the frontend.

    Desktop (please complete the following information):

    • ubuntu vm, cpu optimized, 8vcpu, 32gb ram
    bug performance 
    opened by aysark 42
  • The facets attributes are not added in displayedAttributes and searchableAttributes

    The facets attributes are not added in displayedAttributes and searchableAttributes

    I create an index indexUID with no primary key

    Then I add the genre attribute as attributesForFaceting (via this route POST {{url}}/indexes/indexUID/settings/attributes-for-faceting) and this addition is well processed. Here are the settings right now:

    {
        "rankingRules": [
            "typo",
            "words",
            "proximity",
            "attribute",
            "wordsPosition",
            "exactness"
        ],
        "distinctAttribute": null,
        "searchableAttributes": [],
        "displayedAttributes": [],
        "stopWords": [],
        "synonyms": {},
        "acceptNewFields": true,
        "attributesForFaceting": [
            "genre"
        ]
    }
    

    Then, I add this document:

    [
      { "id": 2, "title": "Pride and Prejudice", "author": "Jane Austin", "genre": "romance" }
    ]
    

    And when I use the route GET {{url}}/indexes/indexUID/documents, I don't have the genre attributes:

    [
        {
            "id": 2,
            "title": "Pride and Prejudice",
            "author": "Jane Austin"
        }
    ]
    

    Indeed, here are the settings now:

    {
        "rankingRules": [
            "typo",
            "words",
            "proximity",
            "attribute",
            "wordsPosition",
            "exactness"
        ],
        "distinctAttribute": null,
        "searchableAttributes": [
            "id",
            "title",
            "author"
        ],
        "displayedAttributes": [
            "title",
            "id",
            "author"
        ],
        "stopWords": [],
        "synonyms": {},
        "acceptNewFields": true,
        "attributesForFaceting": [
            "genre"
        ]
    }
    

    Bug: the attributesForFaceting are not added to searchableAttribtues and displayedAttributes.

    FYI, if I add the document before changing the attributesForFaceting settings, the genre attribute is present in searchableAttributes and displayedAttributes.

    So, the problem seems to come from the order of steps execution.

    Version: on master.

    • [ ] Fix in the code
    • [ ] Add test in the "classic" order = create index -> add document -> change facets settings -> check searchable and displayed attributes
    • [ ] Add test in the "buggy" order = create index -> change facets settings -> add document -> check searchable and displayed attributes
    bug 
    opened by curquiza 35
  • Tracking issue: SortBy at query time

    Tracking issue: SortBy at query time

    The SortBy feature is something that will help e-commerce websites or any website that needs to display documents in an order that depends on the user front-end settings, therefore at query time. This can be useful when you want the user to be able to choose if he want to see documents by ascending or descending price for example.

    For that we will add two settings:

    • The sortableAttributes field to the settings, this way the engine is aware of the fields that it needs to index like numbers, etc...
    • The sortBy field to the search query parameters, it contains the name of one of the sortable attribute you defined in the settings and will be used as the last sorting criterion.

    How Algolia handles that

    Algolia uses replicas to handle this kind of custom search, for each of the custom sortable attributes you want to have, the tools of Algolia creates replicas of your main index and changes the settings.

    When a search query with custom sorting rules is performed, the front-end tools will request the right index. This index is named based on the rules you changed e.g. "movies_asc(price)_desc(released_at)".

    Notice that you pay for all the replicas you have and all documents that are in any index count, it means if your plan allows you to have 10k documents but you have one replica, therefore you can only have 5k documents.

    feature request 
    opened by Kerollmops 30
  • Unclear error when there is not enough space left

    Unclear error when there is not enough space left

    Describe the bug When trying to index documents in a kubernetes volume that does not have enough space left, Meilisearch returns the following error:

    {
          “details”: {
            “indexedDocuments”: 0,
            “receivedDocuments”: 46206
          },
          “duration”: “PT512.665928885S”,
          “enqueuedAt”: “2022-03-17T14:58:24.465745303Z”,
          “error”: {
            “code”: “internal”,
            “link”: “https://docs.meilisearch.com/errors#internal”,
            “message”: “I/O error (os error 5)“,
            “type”: “internal”
          },
          “finishedAt”: “2022-03-17T15:06:57.168374834Z”,
          “indexUid”: “bgg”,
          “startedAt”: “2022-03-17T14:58:24.502445949Z”,
          “status”: “failed”,
          “type”: “documentAddition”,
          “uid”: 3
    }
    

    This error might also happen outside of a kubernetes environment, not tested.

    To Reproduce Steps to reproduce the behavior:

    1. Create a Meilisearch instance in a Kubernetes cluster and use a persistent volume to store the data.ms
    2. Index documents until the volume is full

    Expected behavior A clear error that is documented should be returned

    Meilisearch version: v0.26.0


    EDIT from @curquiza

    How?

    When Meilisearch does not have enough place on the machine, you get the following error":

    {
        "message": "I/O error (os error 5).",
        "code": "internal",
        "type": "internal",
        "link": "https://docs.meilisearch.com/errors#internal"
    }
    

    We want to replace

    • the code (not type) internal by no_space_left_on_device
    • the link #internal by #no_space_left_on_device

    ⚠️ This is what the specification already mentioned and it looks like Meilisearch does not follow it yet: https://github.com/meilisearch/specifications/blob/main/text/0061-error-format-and-definitions.md#no_space_left_on_device

    Impacted teams

    Since this error is already in the spec (and so in the docs) and supposed to exist, no ping to do. https://docs.meilisearch.com/reference/errors/error_codes.html#no-space-left-on-device

    bug milli impacts cloud error handler 
    opened by nicolasvienot 29
  • Heed error: Function not implemented (os error 38)

    Heed error: Function not implemented (os error 38)

    Describe the bug Running the container fails due to 'heed error'. Changing version doesn't seem to make a difference. Perhaps related to underlying Rust function?

    To Reproduce Steps to reproduce the behaviour:

    1. docker-compose.yml contains...
      search:
        image: getmeili/meilisearch:v0.18.1
        restart: always
        volumes:
          - ./data.ms:/data.ms
        ports:
          - 7700:7700
    
    1. docker-compose up In container log you will see... Error: heed error; Function not implemented (os error 38) Have tested with image 0.13.0, 0.16.0, 0.17.0, and 0.18.1. Using version 0.12.0 you will see a different error.

    Expected behavior A clear and concise description of what you expected to happen.

    Desktop (please complete the following information): Docker Desktop, also reproducible on Google Cloud, Cloud Compute, VM Instance.

    bug 
    opened by chaskett 29
  • Attributes known by MeiliSearch but invisible for the user

    Attributes known by MeiliSearch but invisible for the user

    Related to this comment in this discussion.

    There are some situations where MeiliSearch knows information that the user cannot guess.

    Example:

    • I add a document with title and author attributes.
    • I update the settings to only have title as displayed and searchable attributes -> now, I cannot see any author in my settings and in my documents either.
    • I add another document with title and author

    The author field is not considered as a new field and is not added to the searchable and displayed attributes (we can expect this addition because the acceptNewFields boolean is set to true by default in my settings).

    But here, for MeiliSearch, author is not a new field.

    In your comment @Kerollmops you say:

    We must not save an attribute that will never be used (not in the settings) and consider it a new attribute if we see new documents containing it (because we must not be aware of it) #761 (comment).

    I understand here you want to remove the author field from MeiliSearch if it's not used in the settings or in the documents. But what about the information (= the value) in the document for the author field? The user might have miss-manipulated the settings and wants the author field to come back right after. We cannot erase their data. (Hope I'm clear)

    I don't know what is the best behavior to adopt. Maybe having an entrypoint in the API to know what MeiliSearch knows...? I mean, all the attributes it already knows and to which you can access/manipulate with your settings...?

    opened by curquiza 28
  • Ability to pass a configuration file to Meilisearch

    Ability to pass a configuration file to Meilisearch

    Discussed with @gmourier and following this information: https://github.com/meilisearch/product/discussions/85#discussioncomment-2864656

    Related to the following spec: https://github.com/meilisearch/specifications/pull/185


    We want Meilisearch to accept a configuration file that would be an alternative to the command-line options you can set when launching Meilisearch, for instance

    meilisearch --master-key=XXX
    

    Requirements

    Format

    The file format should be TOML.

    Priority order

    Configuration file < Env variables < command-line options

    It means the options in the configuration file can be overwritten by the environment variable set (if they exist) and that can be themself overwritten by the command-line options (if they exist)

    Example

    With this config file

    master_key = "thisisasuper1337masterkey@@@"
    db_path = "./filepath1"
    http_address = "127.0.0.1:7701"
    no_anayltics = true
    

    and with the following variables and command-line options:

    export MEILI_DB_PATH=./filepath2
    export MEILI_HTTP_ADDR=127.0.0.1:7702
    
    meilisearch --master-key=abcd1234 --db-path=./filepath3
    

    The final values kept by Meilisearch will be

    • No analytics thanks to no_analytics = true set in the config file
    • The db path is filepath3 because --db-path=./filepath3 has been set as command line options. ./filepath1 and ./filepath2 are ignored.
    • The HTTP address is 127.0.0.1:7702 because set as an environment variable. The value in the config file (127.0.0.1:7701) is ignored.
    • The master key is abcd1234 set in the command-line option. The value in the config file is ignored ( thisisasuper1337masterkey@@@ ).

    Config file content

    The config file will have sections gathering the same kind of variable.

    Example:

    master_key = "thisisasuper1337masterkey@@@"
    no_analytics = true
    
    [dump]
    path = "dumps"
    
    [snapshot]
    enabled = true
    
    [ssl]
    require_auth = true
    

    See comments below, sections are not something we want.

    What we would rather: a default config file containing

    • fake sections separated by comments
    • a comment header redirecting to the documentation for more information

    @meilisearch/docs-team this file could be easily downloaded

    curl https://raw.githubusercontent.com/meilisearch/meilisearch/main/config.toml > config.toml
    

    Config file command line

    The default config file name is config.toml and will be retrieved by Meilisearch by default in the current working directory

    You can pass the config file as command-line option

    meilisearch --config-file-path="./config.toml"
    

    So the default value of config-file-path is ./config.toml.

    This means by default, Meilisearch will try to read ./config.toml.

    If no ./config.toml file is found and no --config-file-path option is passed, Meilisearch does not throw any error. If --config-file-path is passed and is associated to an existing file (or impossible to open), Meilisearch throw an error

    Display when launching Meilisearch

    888b     d888          d8b 888 d8b                                            888
    8888b   d8888          Y8P 888 Y8P                                            888
    88888b.d88888              888                                                888
    888Y88888P888  .d88b.  888 888 888 .d8888b   .d88b.   8888b.  888d888 .d8888b 88888b.
    888 Y888P 888 d8P  Y8b 888 888 888 88K      d8P  Y8b     "88b 888P"  d88P"    888 "88b
    888  Y8P  888 88888888 888 888 888 "Y8888b. 88888888 .d888888 888    888      888  888
    888   "   888 Y8b.     888 888 888      X88 Y8b.     888  888 888    Y88b.    888  888
    888       888  "Y8888  888 888 888  88888P'  "Y8888  "Y888888 888     "Y8888P 888  888
    
    Config file path:       "./config.toml"
    Database path:		"./data.ms"
    

    If the users do not pass any config file and no ./config.toml exists, we must display none instead of "./config.toml"

    Errors (bonus)

    We need to parse and display clear errors message for the configuration scheme. e.g. https://docs.rs/miette/latest/miette/

    Implementations

    We could probably start by using the toml crate and declare a struct with a simple derive on it. We could start the job in the options.rs file or maybe create a new one specifically for this config file.

    If you have any questions regarding the feature or the implementation, please let us know about this issue! Every feedback or questions are welcome!

    TODO

    • [x] Merge the first iteration of this issue (https://github.com/meilisearch/meilisearch/pull/2745)
    • [x] Improve the default config file (assigned: @curquiza) #2928
    • [x] Fix the following sub-issues
      • [x] https://github.com/meilisearch/meilisearch/issues/2800
      • [x] https://github.com/meilisearch/meilisearch/issues/2801
    • [X] Create the specification -> https://github.com/meilisearch/specifications/pull/185

    For Meili people

    A spec will be open once we have implemented it. Some changes can still be applied, we need to see the final implementation to create the spec. Since we let this issue (so far) to the community, we don't know yet in which release this new feature will be available (at minimum v0.29.0, not before).

    Ping @meilisearch/cloud-team @meilisearch/docs-team who can be concerned by this issue.

    enhancement good first issue impacts docs impacts integrations impacts cloud v0.30.0 
    opened by curquiza 27
  •  Migrating 40M records from Postgres to Meilisearch takes too long

    Migrating 40M records from Postgres to Meilisearch takes too long

    I am trying to migrate 40M Postgres records (user comments) to Melisearch. Each time, I am querying 10K records from Postgres and writing to Meilisearch. The migration script has been completed. But it has been more than 3 days, only 4.2 Million records only migrated. The count is increasing very slowly.

    I also see the following error messages in the error log:

    [2021-02-18T12:48:44Z INFO  ureq::unit] sending request POST https://api.amplitude.com/httpapi
    [2021-02-18T13:14:58Z ERROR meilisearch_core::database] commit nested transaction failed: Input/output error (os error 5)
    [2021-02-18T13:43:50Z ERROR meilisearch_core::database] commit nested transaction failed: Input/output error (os error 5)
    [2021-02-18T13:48:45Z INFO  ureq::unit] sending request POST https://api.amplitude.com/httpapi
    [2021-02-18T14:13:03Z ERROR meilisearch_core::database] commit nested transaction failed: Input/output error (os error 5)
    [2021-02-18T14:42:05Z ERROR meilisearch_core::database] commit nested transaction failed: Input/output error (os error 5)
    [2021-02-18T14:48:45Z INFO  ureq::unit] sending request POST https://api.amplitude.com/httpapi
    [2021-02-18T15:12:06Z ERROR meilisearch_core::database] commit nested transaction failed: Input/output error (os error 5)
    [2021-02-18T15:41:40Z ERROR meilisearch_core::database] commit nested transaction failed: Input/output error (os error 5)
    [2021-02-18T15:48:46Z INFO  ureq::unit] sending request POST https://api.amplitude.com/httpapi
    

    Also, I tried to get updates using the following curl

    curl 'http://localhost:7700/indexes/comments/updates' | jq
    

    It is running forever, not getting any result from the server.

    1. What is commit nested transaction failed and How to fix it?
    2. Is there any best practice to write large amounts data to meilisearch?
    3. Is there any limitation in the amount of data to be handled by meilisearch?
    4. Is there an option to disable amplitude data?
    bug performance 
    opened by aaqibjavith 26
  • Unable to add documents and endpoints timeout/unresponsive

    Unable to add documents and endpoints timeout/unresponsive

    Describe the bug Since running v0.21.0 I've been noticing that after a short while, there are no more documents being added. This is because the document endpoint simply times out (HttpTimeout of 100 seconds is hit on our backend). Also trying to call the /stats endpoint for an index does not respond.

    However, other endpoints like /indexes/{index_uid} and /indexes/{index_uid}/search respond fine.

    To Reproduce Steps to reproduce the behavior:

    1. Not found.

    Expected behavior That documents can be added and /stats returns the index statistics.

    Screenshots Timeout from our backend:
    image

    Example of curl from inside the container on localhost. First showing the index exists/returns. Second with short 10 second timeout. image

    MeiliSearch version: v0.21.0rc3

    Additional context Running on kubernetes, using the meilisearch chart. Deletion of the volume/fresh run doesn't fix anything (have to do this on upgrades anyway)

    bug needs more info performance 
    opened by carlreid 25
  • Meilisearch Version 30.4 Undefined array key

    Meilisearch Version 30.4 Undefined array key "facets"

    I am new to Meilisearch been on this for days,

    I have followed the documentation

    These are the steps

    POSTMAN "filterableAttributes":["colour", "size", "fragrance", "theme", "crystal"] TO ADD THEM

    PRODUCT MODEL public function toSearchableArray() {

    return array_merge([
      'id' => $this->id,
      'title' => $this->title,
      'slug' => $this->slug,
      'price' =>  $this->price,
      'category_ids' => $this->categories->pluck('id')->toArray()
    ], 
    $this->variations->groupBy('type')
         ->mapWithKeys(fn ($variation, $key) => [
         $key => $variation->pluck('title')
         ])
         ->toArray()
    

    );

    Next PRODUCT BROWESER $searchquery = Product::search('', function ($meilisearch, string $query, array $options) {

            $options['facets'] = ['colour', 'theme', 'size', 'fragrance'];
        
            return $meilisearch->search($query, $options);
            
        })->raw();
    

    $search = $this->category->products->find(collect($searchquery['hits'])->pluck('id'));

    return view('livewire.product-browser', [
            'currencies' => $currencies,
            'filters' => $search['facets'],
            'products' => $products
        ]);
    

    C:\wamp64\www\www.leeweaver.uk\vendor\laravel\framework\src\Illuminate\Collections\Collection .php   : 1701 public function offsetGet($key): mixed

    {
    
        return $this->items[$key];
    
    }
    

    What am I doing wrong please?.

    Lee

    opened by leeweaver2222 0
  • Bump tokio from 1.21.2 to 1.23.1

    Bump tokio from 1.21.2 to 1.23.1

    Bumps tokio from 1.21.2 to 1.23.1.

    Release notes

    Sourced from tokio's releases.

    Tokio v1.23.1

    This release forward ports changes from 1.18.4.

    Fixed

    • net: fix Windows named pipe server builder to maintain option when toggling pipe mode (#5336).

    #5336: tokio-rs/tokio#5336

    Tokio v1.23.0

    Fixed

    • net: fix Windows named pipe connect (#5208)
    • io: support vectored writes for ChildStdin (#5216)
    • io: fix async fn ready() false positive for OS-specific events (#5231)

    Changed

    • runtime: yield_now defers task until after driver poll (#5223)
    • runtime: reduce amount of codegen needed per spawned task (#5213)
    • windows: replace winapi dependency with windows-sys (#5204)

    #5208: tokio-rs/tokio#5208 #5216: tokio-rs/tokio#5216 #5213: tokio-rs/tokio#5213 #5204: tokio-rs/tokio#5204 #5223: tokio-rs/tokio#5223 #5231: tokio-rs/tokio#5231

    Tokio v1.22.0

    Added

    • runtime: add Handle::runtime_flavor (#5138)
    • sync: add Mutex::blocking_lock_owned (#5130)
    • sync: add Semaphore::MAX_PERMITS (#5144)
    • sync: add merge() to semaphore permits (#4948)
    • sync: add mpsc::WeakUnboundedSender (#5189)

    Added (unstable)

    • process: add Command::process_group (#5114)
    • runtime: export metrics about the blocking thread pool (#5161)
    • task: add task::id() and task::try_id() (#5171)

    Fixed

    • macros: don't take ownership of futures in macros (#5087)
    • runtime: fix Stacked Borrows violation in LocalOwnedTasks (#5099)
    • runtime: mitigate ABA with 32-bit queue indices when possible (#5042)
    • task: wake local tasks to the local queue when woken by the same thread (#5095)
    • time: panic in release mode when mark_pending called illegally (#5093)
    • runtime: fix typo in expect message (#5169)

    ... (truncated)

    Commits
    • 1a997ff chore: prepare Tokio v1.23.1 release
    • a8fe333 Merge branch 'tokio-1.20.x' into tokio-1.23.x
    • ba81945 chore: prepare Tokio 1.20.3 release
    • 763bdc9 ci: run WASI tasks using latest Rust
    • 9f98535 Merge remote-tracking branch 'origin/tokio-1.18.x' into fix-named-pipes-1.20
    • 9241c3e chore: prepare Tokio v1.18.4 release
    • 699573d net: fix named pipes server configuration builder
    • 3ce5a26 chore: prepare Tokio v1.23 release (#5270)
    • 644cb82 rt: fix *_closed false positives (#5231)
    • a1316cd io: impl std::io::BufRead on SyncIoBridge\<T> (#5265)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.
    dependencies rust 
    opened by dependabot[bot] 0
  • Update dependencies

    Update dependencies

    opened by Kerollmops 1
  • Primary Key inference simplification: Address error message change

    Primary Key inference simplification: Address error message change

    The changes requested here need to be addressed:

    • https://github.com/meilisearch/meilisearch/pull/3269#discussion_r1061527697
    • https://github.com/meilisearch/meilisearch/pull/3269#discussion_r1061540382

    This requires:

    • [ ] A new milli PR to change the error message
    • [ ] A new meilisearch PR to integrate the changes and update the tests
    • [ ] An update to the related spec PR: https://github.com/meilisearch/specifications/pull/208
    milli 
    opened by dureuill 0
  • Meilisearch use way more memory than it should

    Meilisearch use way more memory than it should

    Describe the bug As you can see in the following image, meilisearch constantly goes over 100% of RAM usage, then it gets killed, tries to index data again and gets killed again etc... image

    Context

    • The searches running at the same time are probably not the issue (the machine isn't used a lot)
    • Meilisearch was able to guess the 70% of the RAM available correctly; it limits itself to 2.5GiB and then tries to use 4GiB and die
    • There is a lot of tasks processing at the same time. 45522, to be exact; maybe this is linked to the issue, maybe not.
    • The geosearch is not used

    The issue appeared to two persons who were sending pretty small batches;

    • 1000 documents per batch with ~1M documents in total
    • 256 documents per batch with ~2M documents in total

    The specs of the first person are;

    4 GB Memory / 2 Intel vCPUs / 25 GB Disk + 90 GB / NYC3 - MeiliSearch 0.30.0 on Debian 10 (buster) 
    

    MAYBE, a first fast fix could be to provide a way to limit the number of tasks the autobatching can batch together. imo that's not the best option, and maybe it won't even solve the issue, but we never know. If we do that, I'm 100% toward an unstable cli flag because I don't want to stabilize this option.

    The real fix should be to find where it comes from in milli and stops using too much memory, but that could take a long time.

    bug milli 
    opened by irevoire 3
  • Create release changelogs for v1.1.0

    Create release changelogs for v1.1.0

    This issue is the entry point regarding the release changelog we must prepare before the first RC of v1.1.0.

    The changelog will be available as a PR in the engine-team repository. Once the PR is ready to be reviewed, the link will be shared in this issue.

    📚 @meilisearch/docs-team we need you to review the PR, if possible, before the first RC of v1.1.0. If lacking of time, the most important is to review it by the date of the official release. The release date is available on the v1.1.0 Milestone.

    Once the official release of v1.1.0 is out, the PR will be merged and this issue closed.

    documentation impacts docs 
    opened by meili-bot 0
Releases(v0.30.5)
  • v0.30.5(Dec 21, 2022)

    🚨 Please prefer using v0.30.5 instead of any v0.30.4 and before.

    ⚠️ If you encountered the following bug, have already tried to download this version and still have the bug, it means your database is corrupted. The only way you can recover your data is to send your documents again in a fresh index. Using a dump will not work, either. We are sorry for the inconvenience.

    Bug fixes 🐞

    • Fix bug regarding the duplicated documents when searching, see this issue (#3267 and meilisearch/milli#754) @loiclec
    Source code(tar.gz)
    Source code(zip)
    meilisearch-linux-aarch64(114.84 MB)
    meilisearch-linux-amd64(111.17 MB)
    meilisearch-macos-amd64(104.35 MB)
    meilisearch-macos-apple-silicon(108.41 MB)
    meilisearch-windows-amd64.exe(103.21 MB)
    meilisearch.deb(18.16 MB)
  • v0.30.4(Dec 15, 2022)

  • v0.30.3(Dec 14, 2022)

    🚨 Replace v0.30.2. Please prefer using v0.30.3 instead.

    ⚠️ If you encountered one of this bug (#2945), have already tried to download this version and still have the bug, it means your database is corrupted. The only way you can recover your data is to send your documents again in a fresh index. Using a dump will not work, either. We are sorry for the inconvenience.

    Bug fixes 🐞

    • Fix the pagination bugs, see issues #3200 and #3228 (meilisearch/milli#737 #3248) @ManyTheFish
    • Fix missing internal key bug see issue #2945 (meilisearch/milli#734 #3248) @loiclec
    • Fix CLI snapshot and dumps options (#3237) @irevoire
    Source code(tar.gz)
    Source code(zip)
    meilisearch-linux-aarch64(114.70 MB)
    meilisearch-linux-amd64(111.06 MB)
    meilisearch-macos-amd64(104.35 MB)
    meilisearch-macos-apple-silicon(108.38 MB)
    meilisearch-windows-amd64.exe(103.22 MB)
    meilisearch.deb(18.20 MB)
  • v0.30.2(Dec 8, 2022)

    🚨 Replace v0.30.1. Please prefer using v0.30.2 instead of v0.30.0 or v0.30.1 if possible

    Bug fixes 🐞

    • Fix bugs regarding filters (meilisearch/milli#727 and #3217) @loiclec
    • Badly formatted instance-uid (#3213) @irevoire
    • Fix pagination with distinct attribute (meilisearch/milli#729 and #3217) @ManyTheFish
    Source code(tar.gz)
    Source code(zip)
    meilisearch-linux-aarch64(114.71 MB)
    meilisearch-linux-amd64(111.07 MB)
    meilisearch-macos-amd64(104.35 MB)
    meilisearch-macos-apple-silicon(108.38 MB)
    meilisearch-windows-amd64.exe(103.22 MB)
    meilisearch.deb(18.20 MB)
  • v0.30.1(Dec 6, 2022)

    🚨 Replace v0.30.0, please use v0.30.1 instead of v0.30.0 if possible

    ⚠️ If you encountered one of these bugs, have already tried to download this version and still have the bug, it means your database is corrupted. The only way you can recover your data is to send your documents again in a fresh index. Using a dump will not work, either. We are sorry for the inconvenience.

    Bug fixes 🐞

    • Fix duplicated documents at search time (https://github.com/meilisearch/milli/pull/723 and #3202) @loiclec
    • Fix search with filter (https://github.com/meilisearch/milli/pull/712 and #3202) @loiclec
    • Prevent crash when indexing some documents (https://github.com/meilisearch/milli/pull/712 and #3202) @loiclec
    • Filtering results with _geoRadius(lat,lng,0) now returns results (https://github.com/meilisearch/milli/pull/722 and #3202) @amab8901
    • Use config sizes in Gb again (https://github.com/meilisearch/meilisearch/pull/3160) @Kerollmops

    Thanks again to @amab8901 for his contribution to our release bug fixes! Also, a big thanks to every people who helped us debug, especially @0x15f,@Fronix, @gbuckingham89, @mmachatschek, @roparz, and @thijndehaas ❤️

    Source code(tar.gz)
    Source code(zip)
    meilisearch-linux-aarch64(114.68 MB)
    meilisearch-linux-amd64(111.06 MB)
    meilisearch-macos-amd64(104.34 MB)
    meilisearch-macos-apple-silicon(108.37 MB)
    meilisearch-windows-amd64.exe(103.22 MB)
    meilisearch.deb(18.19 MB)
  • v0.29.3(Dec 5, 2022)

    🚨 Replace v0.29.2 which did not contain all the expected bug fixes.

    ⚠️ Like for v0.29.2, if you encountered one of these bugs, have already tried to download this version and still have the bug, it means your database is corrupted. The only way you can recover your data is to send your documents again in a fresh index. Using a dump will not work, either. We are sorry for the inconvenience

    Bug fixes 🐞

    • Prevent duplicate documents in the search route (#3047 and meilisearch/milli#698) @Kerollmops
    • Fix missing key in the documents database (#3047 and meilisearch/milli#698) @Kerollmops
    Source code(tar.gz)
    Source code(zip)
    meilisearch-linux-aarch64(114.30 MB)
    meilisearch-linux-amd64(110.34 MB)
    meilisearch-macos-amd64(103.70 MB)
    meilisearch-windows-amd64.exe(102.42 MB)
    meilisearch.deb(17.97 MB)
  • v0.30.0(Nov 28, 2022)

    This release introduces index deployment with zero downtime and adds task management features. It also brings the capability to navigate search results by page selection.

    Thanks to Hacktoberfest, tons of updates and bug fixes have been done by the fantastic Meilisearch community. You were more present than ever, and words cannot do justice to just how grateful we are for your support. A big thank you from the whole Meilisearch team! ❤️

    🧰 Most integrations (SDKs, clients, libraries) will be compatible with this version within four hours of the release. Sometimes this can take up to 48 hours, depending on the issues we encounter during the release.

    Here is the exhaustive list of integrations not immediately compatible with v0.30.0:

    • meilisearch-dart and meilisearch-swift: though you can still use both libraries with v0.30.0, the new available features are not yet available. Let us know if you really need it—and contributions are always welcome!
    • meilisearch-java: Our team is still working on refactoring the code; this is reaching the end, but the SDK cannot be used with v0.30.0 yet. Follow the repository to know when it will be compatible.

    New features and improvements 🔥

    Improve search result navigation: exhaustive number of search results

    When paginating search results with offset and limit, Meilisearch only returns an estimate of the total number of results. Since estimatedTotalHits can change, creating reliable pagination interfaces with numbered page selectors is challenging.

    v0.30 introduces two new search parameters, page and hitsPerPage. Queries with these parameters return an exhaustive number of totalHits and totalPages, which you can then use to create UI elements such as numbered page selectors.

    The following example fetches the second page of results for a given query:

    curl \
      -X POST 'http://localhost:7700/indexes/movies/search' \
      -H 'Content-Type: application/json' \
      --data-binary '{ "q": "shifu", "page": "2", "hitsPerPage": "10" }'
    
    {
        "hits": [
            // … 10 hits
        ],
        // …
        "page": 2,
        "hitsPerPage": 10,
        "totalHits": 2100,
        "totalPages": 210
    }
    

    Done in #2601 by @ManyTheFish.

    Cancel processing and enqueued tasks

    Meilisearch now allows you to cancel enqueued or processing tasks through a new API route, /tasks/cancel. This can be useful when you need to interrupt a task that is taking too much time to be completed or enqueued by mistake.

    To cancel tasks, filter them by specifying one of the following query parameters: uids, statuses, types, or indexUids.

    Tasks can be filtered by date fields:

    • beforeEnqueuedAt / afterEnqueuedAt
    • beforeStartedAt / afterStartedAt

    For example, to cancel tasks by uid:

    curl \
      -X POST 'http://localhost:7700/tasks/cancel?uids=1,2'
    
    {
      "taskUid": 1,
      "indexUid": "null",
      "status": "enqueued",
      "type": "taskCancelation",
      "enqueuedAt": "2021-08-12T10:00:00.000000Z"
    }
    

    To cancel all enqueued tasks across all indexes in an instance:

    curl \
      -X POST 'http://localhost:7700/tasks/cancel?statuses=enqueued'
    

    Read more about cancelling tasks.

    Done in #2763 by @irevoire, @Kerollmops and @loiclec.

    Delete the task history

    This release introduces a new DELETE endpoint to the /tasks route. You can use it to remove finished tasks (succeeded, failed or canceled) from Meilisearch's task history. This can be helpful in reducing the amount of occupied disk space.

    To delete finished tasks, filter them by specifying one of the following query parameters: uids, statuses, types, indexUids, or canceledBy.

    Tasks can be filtered by date fields:

    • beforeEnqueuedAt / afterEnqueuedAt
    • beforeStartedAt / afterStartedAt
    • beforeFinishedAt / afterFinishedAt

    For example, to delete tasks by uid:

    curl \
      -X DELETE 'http://localhost:7700/tasks?uids=1,2'
    
    {
      "taskUid": 3,
      "indexUid": null,
      "status": "enqueued",
      "type": "taskDeletion",
      "enqueuedAt": "2021-08-12T10:00:00.000000Z"
    }
    

    To delete all finished tasks in an instance:

    curl \
      -X DELETE 'http://localhost:7700/tasks?statuses=failed,succeeded,canceled'
    

    Read more about deleting finished tasks.

    Done in #2763 by @irevoire, @Kerollmops, and @loiclec.

    Deploy indexes with zero downtime

    Deploy new indexes version with zero downtime to the search clients. Meilisearch now provides a seamless way to deploy multiple indexes atomically with the new swap indexes API.

    To swap indexes, use the new /swap-indexes route:

    curl \
      -X POST 'http://localhost:7700/swap-indexes'\
      -H 'Content-Type: application/json' \
      --data-binary '[
          { "indexes": ["indexA", "indexB"] }
      ]'
    
    {
      "taskUid": 3,
      "indexUid": null,
      "status": "enqueued",
      "type": "indexSwap",
      "enqueuedAt": "2021-08-12T10:00:00.000000Z"
    }
    

    Read more about swapping indexes.

    Done in #2763 by @irevoire, @Kerollmops, and @loiclec.

    Configuration file support

    You can now use a configuration file to set instance options.

    By default, Meilisearch will search the working directory for a file named ./config.toml.

    You can use the --config-file-path option if you want to keep your configuration file in another directory:

    meilisearch --config-file-path="./my-config.toml"
    

    Example of configuration file:

    env = "production"
    master_key = "MY_MASTER_KEY"
    schedule_snapshot = true
    

    You can download a default configuration file from our repository:

    curl https://raw.githubusercontent.com/meilisearch/meilisearch/main/config.toml > config.toml
    

    Read more about customizing Meilisearch with a configuration file.

    Done in #2745, #2928, #2804, #2841, and #2961 by @mlemesle, @choznerol, @arriven, @LunarMarathon and @curquiza,

    Other improvements

    • The fresh new filters are also availabe for the GET /tasks: uids, canceledBy, beforeEnqueuedAt, afterEnqueuedAt, beforeStartedAt, afterStartedAt, beforeFinishedAt, afterFinishedAt.
    • Full support for compressed API requests (Gzip, Brotli, Zlib) (#2876) @mou
    • Significant indexing speed improvements (#2763, meilisearch/milli#639, meilisearch/milli#619) @loiclec
    • Change default bind address from 127.0.0.1 to localhost, making the default address available in IPv4 and IPv6 (#2861) @Fall1ngStar
    • Provide Apple Silicon binaries (#2837) @jeertmans
    • Add missing environment variables for dump and snapshot features (#2738) @gmourier
    • Increase max concurrent readers from 126 to 1024 (#2830) @arriven
    • Reduce the size of the Meilisearch binary: allow excluding specialized tokenizations when building binaries (#2773) @jirutka
    • Introduce the snapshotCreation task type: snapshot tasks are added to the task list, for more transparency (#2763) @Kerollmops
    • Reduce the size taken by Meilisearch on the disk space (#2763, meilisearch/milli#639) @loiclec
    • canceledBy and error fields are now always part of the task object (#2763) @irevoire, @Kerollmops, and @loiclec

    Behavior changes ⚠️

    • Rename receivedDocumentIds into providedIds in the task object when performing a delete-batch action (#2826) @Ugzuzg
    • Return a new error when using /keys without any master key set: missing_master_key instead of invalid_api_key (#2922) @vishalsodani
    • Some names of filter parameters for /tasks and some error codes have been renamed (#3023) @Kerollmops @loiclec
      • indexUid query parameter is renamed indexUids
      • type query parameter is renamed types
      • status query parameter is renamed statuses
      • invalid_task_type error is renamed invalid_task_types_filter
      • invalid_task_status error is renamed invalid_task_statuses_filter

    Fixes 🐞

    • Improve error message when adding documents: replace a meaningless serde message (#2819) @onyxcherry
    • Fix dumpCreation tasks bug (#2890) @washbin
    • Don't panic when the error length is slightly over 100 (#2727) @onyxcherry
    • Fix phrase search bug (#2763, meilisearch/milli#639 and meilisearch/milli#647) @loiclec
    • Fix filtering bug (meilisearch/milli#619) @loiclec
    • Fix facetDistribution when setting maxFacetPerValue if only a few documents are returned (meilisearch/milli#619) @loiclec
    • Correct variant returned for invalid_api_key_indexes error when creating an API key (#3032) @ManyTheFish
    • Prevent phrase search containing stop words never retrieves any documents (#3036 and meilisearch/milli#664) @Samyak2 @Kerollmops
    • Add missing IN/NOT IN operators to the invalid_filter error message (#3036 and meilisearch/milli#676) @Pranav-yadav @Kerollmops
    • Filtering by "inf", "infinity", or "NaN" as numbers will yield an internal error (#3036 and meilisearch/milli#689) @dureuill @Kerollmops
    • Prevent duplicate documents in the search route (#3036 and meilisearch/milli#690) @Kerollmops
    • Re-introduce missing key in the documents database (#3036 and meilisearch/milli#690) @Kerollmops
    • Don't remove DB if unreadable (#3077) @dureuill
    • Fix MDB_BAD_VALSIZE error (#3084 meilisearch/milli#696) @Kerollmops @loiclec
    • Prevent OS error 22 when creating indexes (#3084 meilisearch/milli#699) @Kerollmops @dureuill
    • Display the dumpUid as null until we create it (#3122) @Kerollmops

    Misc

    • GitHub CIs and tests
      • Add dry run for publishing binaries: check if the compilation works (#2726 and #2733) @curquiza
      • Add CI workflow to update the Meilisearch version in Cargo.toml files (#2741 and #2744) @curquiza
      • Add CI manifest to automate some steps when closing/creating a Milestone (#2739, #2852, #2853) @curquiza
      • Improve Docker CI for cloud team (#2790, #2896) @curquiza
      • Update checkout v2 to v3 in CI manifests and use a unique GitHub PAT (#2740) @curquiza
      • Uncomment cache steps in Github CI (#2868) @AM1TB
      • Skip dashboard test if the mini-dashboard feature is disabled (#2814) @jirutka
      • Use pre-compiled binaries for faster CI (meilisearch/milli#685) @azzamsa
      • Refactorize the whole test suite (#3085) @irevoire
    • Dependencies
      • Upgrade dependencies (#2847) @loiclec
      • Upgrade clap to 4.0 (#2851) @choznerol
      • Upgrade to alpine 3.16 in Dockerfile (#2827) @nwnt
    • Documentation
      • Update internal CLI documentation (#2839) @jeertmans
      • Improve issue template to avoid support questions in Meilisearch issues (#2772) @curquiza
      • Update Hacktoberfest section in CONTRIBUTING.md (#2817, #2794, #2793) @meili-bot @curquiza @Luna-meili
      • Fix typos (#2789) @kianmeng
      • Fix broken link in CONTRIBUTING.md (#2845) @AnirudhDaya
    • Delete v1.rs since it is not included in project (#2834) @Himanshu664
    • Download-latest script: refactoring (#2913) @nfsec
    • Make Clippy happy (#2831) @Kerollmops
    • Improve debuggability by naming spawned threads (#3061) @dureuill

    ❤️ Thanks again to our external contributors:

    • Meilisearch: @AM1TB, @AnirudhDaya, @arriven, @choznerol, @Fall1ngStar, @Himanshu664, @jeertmans, @jirutka, @kianmeng, @LunarMarathon, @mlemesle, @mou, @nfsec, @nwnt, @onyxcherry, @Ugzuzg, @vishalsodani and @washbin.
    • Milli: @anirudhRowjee, @azzamsa, @ehiggs, @jeertmans, @msvaljek, @Pranav-yadav, @Samyak2, @vincent-herlemont, and @vishalsodani.
    Source code(tar.gz)
    Source code(zip)
    meilisearch-linux-aarch64(114.70 MB)
    meilisearch-linux-amd64(111.04 MB)
    meilisearch-macos-amd64(104.33 MB)
    meilisearch-macos-apple-silicon(108.37 MB)
    meilisearch-windows-amd64.exe(103.20 MB)
    meilisearch.deb(18.20 MB)
  • v0.30.0rc4(Nov 23, 2022)

    Bug fixes

    • Fix linking error when building binaries for aarch64 (#3106) @Kerollmops
    • Always display deletedDocuments in the IndexDeletion details (#3110) @Kerollmops
    • Display the dumpUid as null until we create it (#3122) @Kerollmops

    Misc

    • Refactorize the whole test suite (#3085) @irevoire
    • Update the analytics on the ranking rules (#3114) @irevoire
    Source code(tar.gz)
    Source code(zip)
    meilisearch-linux-aarch64(114.67 MB)
    meilisearch-linux-amd64(111.03 MB)
    meilisearch-macos-amd64(104.31 MB)
    meilisearch-macos-apple-silicon(108.37 MB)
    meilisearch-windows-amd64.exe(103.19 MB)
  • v0.30.0rc2(Nov 17, 2022)

    Changes

    • Rename matchedDocuments into providedIds (#3081) @Kerollmops
    • Rename originalFilters into originalFilter on the cancelation and deletion routes (#3080) @Kerollmops
    • Add missing analytics (#3056 #3059 #3060 #3063 #3065) @irevoire

    Reminder:

    We collect telemetry data for only two reasons: so that we can improve our product, and so that we can continue working on this project full-time. In order to create a better product, we need reliable quantitative information. The data we collect helps us fix bugs, evaluate the success of features, and better understand our users' needs. We also need to prove that people are actually using Meilisearch. Usage metrics help us justify our existence to investors so that we can keep this project alive.

    Bug fixes 🐞

    • Don't remove DB if unreadable (#3077) @dureuill
    • Fix: MDB_BAD_VALSIZE: Unsupported size of key/DB name/data, or wrong DUPFIXED size (#3084 meilisearch/milli#696) @Kerollmops @loiclec
    • Thread panicked in incremental facets (#3084 meilisearch/milli#696) @Kerollmops @loiclec
    • Thread Panic from grenad - must be greater than (#3084 meilisearch/milli#697) @Kerollmops @loiclec
    • Can't create index (OS error 22) (#3084 meilisearch/milli#699) @Kerollmops @dureuill
    • Fixes regarding the newly introduced features
      • missing new query filters in cancel-tasks route (#3049) @irevoire
      • error code on cancel tasks not updated with new filters naming (#3049) @irevoire
      • task future details fields are not displayed at null when the task status is enqueued (#3067) @ManyTheFish
      • tasks future details fields are not displayed to 0 when the task reaches a finished state canceled (#3067) @ManyTheFish
      • Task field originalFilters should contain the first ? char extracted from the path (#3068) @Kerollmops

    Misc

    • Improve debuggability by naming spawned threads (#3061) @dureuill
    Source code(tar.gz)
    Source code(zip)
    meilisearch-linux-amd64(111.03 MB)
    meilisearch-macos-amd64(104.31 MB)
    meilisearch-macos-apple-silicon(108.36 MB)
    meilisearch-windows-amd64.exe(103.19 MB)
  • v0.29.2(Nov 15, 2022)

    🚨 Replaced by v0.29.3

    Bug fixes 🐞

    • Prevent duplicate documents in the search route (#3047 and meilisearch/milli#698) @Kerollmops
    • Fix missing key in the documents database (#3047 and meilisearch/milli#698) @Kerollmops

    ⚠️ If you encountered one of these bugs, have already tried to download this version and still have the bug, it means your database is corrupted. The only way you can recover your data is to send your documents again in a fresh index. Using a dump will not work, either. We are sorry for the inconvenience.

    Source code(tar.gz)
    Source code(zip)
    meilisearch-linux-aarch64(114.30 MB)
    meilisearch-linux-amd64(110.34 MB)
    meilisearch-macos-amd64(103.70 MB)
    meilisearch-windows-amd64.exe(102.42 MB)
    meilisearch.deb(17.98 MB)
  • v0.30.0rc1(Nov 10, 2022)

    ⚠️ Breaking changes

    • Some names of filter parameters for /tasks and some error codes have been renamed (#3023) @Kerollmops @loiclec
      • indexUid query parameter is renamed indexUids
      • type query parameter is renamed types
      • status query parameter is renamed statuses
      • invalid_task_type error is renamed invalid_task_types_filter
      • invalid_task_status error is renamed invalid_task_statuses_filter

    🐞 Bug fixes

    • Wrong variant returned for invalid_api_key_indexes error when creating an API key (#3032) @ManyTheFish
    • Phrase search containing stop words never retrieves any documents (#3036 and meilisearch/milli#664) @Samyak2 @Kerollmops
    • Missing IN / NOT IN operator in the invalid_filter error message (#3036 and meilisearch/milli#676) @Pranav-yadav @Kerollmops
    • Filtering by the value of "inf" or "infinity" yields an internal error (#3036 and meilisearch/milli#689) @dureuill @Kerollmops
    • Duplicate documents in the search route (#3036 and meilisearch/milli#690) @Kerollmops
    • Missing key in the documents database (#3036 and meilisearch/milli#690) @Kerollmops
    • Fixes regarding the newly introduced features
      • Fix error code duplicate_index_found error on the index swap route (#3019) @loiclec
      • In the task object originalQuery has been renamed originalFilters for cancel/deletion tasks
      • canceledBy filter not implemented on GET /tasks route (#3023) @Kerollmops @loiclec
      • invalid_task_type is never raised on GET /tasks (#3023) @Kerollmops @loiclec
      • invalid_task_status is never raised on GET /tasks (#3023) @Kerollmops @loiclec
      • Store the started_at for a task that is canceled when processing (#3022) @Kerollmops

    Thanks to the following persons who have helped us investigate and fix these bugs ❤️ @Arsapol @brentd @ManyTheFish @mason-stewart @qdequele @thijndehaas

    Source code(tar.gz)
    Source code(zip)
    meilisearch-linux-aarch64(114.72 MB)
    meilisearch-linux-amd64(110.96 MB)
    meilisearch-macos-amd64(104.26 MB)
    meilisearch-macos-apple-silicon(108.30 MB)
    meilisearch-windows-amd64.exe(103.09 MB)
  • v0.30.0rc0(Oct 31, 2022)

    ⚠️ Since this is a release candidate (RC), we do NOT recommend using it in a production environment. Something not working as expected? We welcome bug reports and feedback about new features.

    This release introduces index deployment with zero downtime and adds task management features. It also brings the capability to navigate search results by page selection.

    Thanks to Hacktoberfest, tons of updates and bug fixes have been done by the fantastic Meilisearch community. You were more present than ever, and words cannot do justice tojust how grateful we are for your support. A big thank you from the whole Meilisearch team! ❤️

    📖 Meilisearch's official documentation will be ready for the official v0.30.0 release. Meanwhile, work-in-progress documentation is available here.

    New features and improvements 🔥

    Ease search results navigation with pagination

    You can now use page and hitsPerPage to fetch the total number of pages and results for a query. These new search parameters can be used in the place of offset and limit when creating interfaces that require knowing the exhaustive number of search results.

    The following example fetches the second page of results for a given query:

    curl \
      -X POST 'http://localhost:7700/indexes/movies/search' \
      -H 'Content-Type: application/json' \
      --data-binary '{ "q": "shifu", "page": "2", "hitsPerPage": "10" }'
    
    {
        "hits": [
            // … 10 hits
        ],
        // …
        "page": 2,
        "hitsPerPage": 10,
        "totalHits": 2100,
        "totalPages": 210
    }
    

    Done in #2601 by @ManyTheFish.

    Cancel processing and enqueued tasks

    Meilisearch now allows you to cancel enqueued or processing tasks through a new API route, /tasks/cancel. This can be useful when you need to interrupt a task that is taking too much time to be completed or enqueued by mistake.

    To cancel tasks, filters them by specifying one of the following query parameters: uid, status, type, or indexUid.

    Tasks can be filtered by date fields:

    • beforeEnqueuedAt / afterEnqueuedAt
    • beforeStartedAt / afterStartedAt
    • beforeFinishedAt / afterFinishedAt

    For example, to cancel tasks by uid:

    curl \
      -X POST 'http://localhost:7700/tasks/cancel?uid=1,2'
    
    {
      "taskUid": 1,
      "indexUid": "movies",
      "status": "enqueued",
      "type": "taskCancelation",
      "enqueuedAt": "2021-08-12T10:00:00.000000Z"
    }
    

    To cancel all enqueued tasks across all indexes in an instance:

    curl \
      -X POST 'http://localhost:7700/tasks/cancel?status=enqueued'
    

    Done in #2763 by @irevoire, @Kerollmops and @loiclec.

    Delete the task history

    This release introduces a new DELETE endpoint to the /tasks route. You can use it to remove finished tasks (succeeded, failed or canceled) from Meilisearch's task history. This can be helpful in reducing the amount of occupied disk space.

    To delete finished tasks, filter them by specifying one of the following query parameters: uid, status, type, or indexUid.

    Tasks can be filtered by date fields:

    • beforeEnqueuedAt / afterEnqueuedAt
    • beforeStartedAt / afterStartedAt
    • beforeFinishedAt / afterFinishedAt

    For example, to delete tasks by uid:

    curl \
      -X DELETE 'http://localhost:7700/tasks?uid=1,2'
    
    {
      "taskUid": 3,
      "indexUid": null,
      "status": "enqueued",
      "type": "taskDeletion",
      "enqueuedAt": "2021-08-12T10:00:00.000000Z"
    }
    

    To delete all finished tasks in an instance:

    curl \
      -X DELETE 'http://localhost:7700/tasks?status=failed,succeeded,canceled'
    

    Done in #2763 by @irevoire, @Kerollmops, and @loiclec.

    Deploy indexes with zero downtime

    Deploy new indexes version with zero downtime to the search clients. Meilisearch now provides a seamless way to deploy multiple indexes atomically with the new swap indexes API.

    To swap indexes, use the new /swap-indexes route:

    curl \
      -X POST 'http://localhost:7700/swap-indexes'\
      -H 'Content-Type: application/json' \
      --data-binary '[
          { "indexes": ["indexA", "indexB"] }
      ]'
    
    {
      "taskUid": 3,
      "indexUid": null,
      "status": "enqueued",
      "type": "indexSwap",
      "enqueuedAt": "2021-08-12T10:00:00.000000Z"
    }
    

    Done in #2763 by @irevoire, @Kerollmops, and @loiclec.

    Configuration file support

    You can now use a configuration file to set instance options.

    By default, Meilisearch will search the working directory for a file named ./config.toml.

    You can use the --config-file-path option if you want to keep your configuration file in another directory:

    meilisearch --config-file-path="./my-config.toml"
    

    Example of configuration file:

    env = "production"
    master_key = "MY_MASTER_KEY"
    schedule_snapshot = true
    

    You can download a default configuration file from our repository:

    curl https://raw.githubusercontent.com/meilisearch/meilisearch/main/config.toml > config.toml
    

    Done in #2745, #2928, #2804, #2841, and #2961 by @mlemesle, @choznerol, @arriven, @LunarMarathon and @curquiza,

    Other improvements

    • The fresh new filters are also availabe for the GET /tasks: canceledBy, beforeEnqueuedAt, afterEnqueuedAt, beforeStartedAt, afterStartedAt, beforeFinishedAt, afterFinishedAt.
    • Full support for compressed API requests (Gzip, Brotli, Zlib) (#2876) @mou
    • Significant indexing speed improvements (#2763, meilisearch/milli#639, meilisearch/milli#619) @loiclec
    • Provide Apple Silicon binaries (#2837) @jeertmans
    • Add missing environment variables for dump and snapshot features (#2738) @gmourier
    • Increase max concurrent readers from 126 to 1024 (#2830) @arriven
    • Reduce the size of the Meilisearch binary: allow excluding specialized tokenizations when building binaries (#2773) @jirutka
    • Introduce the snapshotCreation task type: snapshot tasks are added to the task list, for more transparency (#2763) @Kerollmops
    • Reduce the size taken by Meilisearch on the disk space (#2763, meilisearch/milli#639) @loiclec

    Behavior changes ⚠️

    • Rename receivedDocumentIds into matchedDocuments in the task object when performing a delete-batch action (#2826) @Ugzuzg
    • Change default bind address from 127.0.0.1 to localhost, making the default address available in IPv4 and IPv6 (#2861) @Fall1ngStar
    • Return a new error when using /keys without any master key set: missing_master_key instead of invalid_api_key (#2922) @vishalsodani

    Fixes 🐞

    • Improve error message when adding documents: replace a meaningless serde message (#2819) @onyxcherry
    • Fix dumpCreation tasks bug (#2890) @washbin
    • Don't panic when the error length is slightly over 100 (#2727) @onyxcherry
    • Fix phrase search bug (meilisearch/milli#639 and meilisearch/milli#647) @loiclec
    • Fix filtering bug (meilisearch/milli#619) @loiclec
    • Fix facetDistribution when setting maxFacetPerValue if only a few documents are returned (meilisearch/milli#619) @loiclec

    Misc

    • GitHub CIs and tests
      • Add dry run for publishing binaries: check if the compilation works (#2726 and #2733) @curquiza
      • Add CI workflow to update the Meilisearch version in Cargo.toml files (#2741 and #2744) @curquiza
      • Add CI manifest to automate some steps when closing/creating a Milestone (#2739, #2852, #2853) @curquiza
      • Improve Docker CI for cloud team (#2790, #2896) @curquiza
      • Update checkout v2 to v3 in CI manifests and use a unique GitHub PAT (#2740) @curquiza
      • Uncomment cache steps in Github CI (#2868) @AM1TB
      • Skip dashboard test if the mini-dashboard feature is disabled (#2814) @jirutka
    • Dependencies
      • Upgrade dependencies (#2847) @loiclec
      • Upgrade clap to 4.0 (#2851) @choznerol
      • Upgrade to alpine 3.16 in Dockerfile (#2827) @nwnt
    • Documentation
      • Update internal CLI documentation (#2839) @jeertmans
      • Improve issue template to avoid support questions in Meilisearch issues (#2772) @curquiza
      • Update Hacktoberfest section in CONTRIBUTING.md (#2817, #2794, #2793) @meili-bot @curquiza @Luna-meili
      • Fix typos (#2789) @kianmeng
      • Fix broken link in CONTRIBUTING.md (#2845) @AnirudhDaya
    • Delete v1.rs since it is not included in project (#2834) @Himanshu664
    • Download-latest script: refactoring (#2913) @nfsec
    • Make Clippy happy (#2831) @Kerollmops

    ❤️ Thanks again to our external contributors:

    • Meilisearch: @AM1TB, @AnirudhDaya, @arriven, @choznerol, @Fall1ngStar, @Himanshu664, @jeertmans, @jirutka, @kianmeng, @LunarMarathon, @mlemesle, @mou, @nfsec, @nwnt, @onyxcherry, @Ugzuzg, @vishalsodani and @washbin.
    • Milli: @anirudhRowjee, @ehiggs, @jeertmans, @msvaljek, @vincent-herlemont, and @vishalsodani.
    Source code(tar.gz)
    Source code(zip)
    meilisearch-linux-aarch64(114.74 MB)
    meilisearch-linux-amd64(111.04 MB)
    meilisearch-macos-amd64(104.55 MB)
    meilisearch-macos-apple-silicon(107.69 MB)
    meilisearch-windows-amd64.exe(103.04 MB)
  • v0.29.1(Oct 10, 2022)

    ⚠️ Use this release instead of v0.29.0 if you have compatibility issues with glibc, see this issue.

    Bug fixes 🐞

    • Make Meilisearch compatible with libc 2.27 again (so Debian 10): use Ubuntu 18.04 for all CI tasks that previously used Ubuntu 20.04 (https://github.com/meilisearch/meilisearch/pull/2862) @loiclec
    Source code(tar.gz)
    Source code(zip)
    meilisearch-linux-aarch64(114.26 MB)
    meilisearch-linux-amd64(110.41 MB)
    meilisearch-macos-amd64(103.99 MB)
    meilisearch-windows-amd64.exe(102.40 MB)
    meilisearch.deb(18.04 MB)
  • v0.29.0(Oct 3, 2022)

    ⚠️ If you have a compatibility issue with libc (for example, with Debian 10) use v0.29.1 instead. See this issue.

    This release includes a much-requested feature: an option to require all query terms to be present in search results. The absence of this feature prevented some users from upgrading to newer Meilisearch versions. Additionally, v0.29 contains several indexing speed improvements.

    🧰 Most integrations (SDKs, clients, libraries) will be compatible with this version within four hours of the release. Sometimes this can take up to 24 hours, depending on the issues we encounter during the release.

    Here is the exhaustive list of integrations not compatible with v0.29.0:

    • meilisearch-dart and meilisearch-swift: though you can use still use both libraries with v0.29.0, the matchingStrategy feature is not yet available. Let us know if you really need it—and contributions are always welcome!
    • meilisearch-java: Our team is still working on refactoring the code, and the SDK cannot be used with v0.29.0. Follow the repository to know when it will be compatible.

    New features and improvements 🔥

    Customize matching strategy

    It is now possible to control how Meilisearch matches documents during search by choosing to return only documents containing all query terms.

    How to activate it?

    curl \
      -X POST 'http://localhost:7700/indexes/movies/search' \
      -H 'Content-Type: application/json' \
      --data-binary '{ "q": "american ninja", "matchingStrategy": "all" }'
    

    By setting "matchingStrategy": "all" In the above example, we ensure Meilisearch will only return documents containing both "american" AND "ninja".

    Meilisearch's default matching strategy is last. It will still return documents containing all the query words, followed by documents that don't contain all the query words.

    Check out the documentation for more information on matchingStrategy.

    Made by @ManyTheFish in #2578 and meilisearch/milli#598.

    Thai language support

    Meilisearch now offers optimized support for Thai 🇹🇭

    Want optimized support for your language? Consider contributing to the Meilisearch tokenizer by following the CONTRIBUTING.md file and integrating your intended normalizer/segmenter.

    The core team is always happy to help our contributors. Do drop us a line if you need us to clarify anything!

    Made by our dear contributor @aFluffyHotdog and by @ManyTheFish in meilisearch/charabia#114, meilisearch/charabia#115, meilisearch/milli##611, and #2636.

    Performance improvements for indexing

    We improved Meilisearch's indexing speed, especially for indexes using filterableAttributes and when updating and deleting documents.

    For more information on the main improvements, check out the following issues: meilisearch/product#513 and meilisearch/product#520.

    Made by @loiclec and @irevoire in #2689, #2690, meilisearch/milli#607, meilisearch/milli#606, meilisearch/milli#587, meilisearch/milli#557,meilisearch/milli#579, and meilisearch/milli#590.

    Filtering: introduce the EXISTS and IN operators

    You can now use the EXISTS and IN operators with the filter search parameter during search.

    With the following set of documents:

    { "id": 1, "product": "T-shirt", "price": 20, "color": "yellow" }
    { "id": 2, "product": "T-shirt",              "color": "red" }
    { "id": 3, "product": "T-shirt", "price": 30 }
    { "id": 4, "product": "T-shirt", "price": 40 }
    
    • The filter price EXISTS will select documents 1, 3, and 4.
    • The filter price IN [30, 20] will select documents 1 and 3.

    These operators can be combined with the existing NOT (!=) operator. Read more about filtering in Meilisearch's documentation.

    Made by @loiclec in #2636, meilisearch/milli#596, and meilisearch/milli#556.

    Key management

    When managing keys, the * helper can now be used to express a set of actions in the actions array.

    For example, instead of specifying indexes.create, indexes.get, indexes.update, indexes.delete; you can now use indexes.*.

    Made by our dear contributors @Mcdostone and @phdavis1027 in #2080 and #2579.

    Behavior changes ⚠️

    Auto-batching

    This previously experimental feature is now enabled by default.

    If you enabled auto-batching in previous versions using --enable-auto-batching, remove this flag when running Meilisearch v0.29.0. All other auto-batching settings (--debounce-duration-sec, --max-batch-size, and --max-documents-per-batch) have been removed.

    If you did not enable auto-batching before, the transition should be seamless and increase indexing speed 🏎️

    If you experience any issues during indexing, try using --disable-auto-batching flag (or the environment variable MEILI_DISABLE_AUTO_BATCHING).

    Made by @Kerollmops in meilisearch/milli#561, #2523, and #2677.

    != (NOT) filter operator

    This behavior change is consistent with the EXISTS and IN operators. The NOT filter now also matches documents missing the specified attributes. More explanation with examples here.

    Made by @loiclec in #2636, and meilisearch/milli#596.

    Fixes 🐞

    • Clamp max size of databases to a multiple of system page size (#2662) @ManyTheFish
    • Prevent whitespace trimming during document id validation (#2636 and meilisearch/milli#599) @ManyTheFish
    • Support https in print_launch_resume (#2664) @evpeople
    • Filters: reserved keywords must wrapped in quotation marks when used field names/values (#2636 and meilisearch/milli#596) @loiclec
    • Fix filtering selection (#2636 and meilisearch/milli#568) @GraDKh

    Misc

    • Completely rework the README (#2504) @CaroFG, @curquiza, @guimachiavelli, and @gmourier
    • Add analytics to the /stats routes (#2674) @irevoire
    • Update link to Cloud beta form (#2625) @davelarkan
    • Internal feature: integrate /metrics route (#2657) @pavo-tusker
    • Fix typo (#2508, #2517, #2556) @ryanrussell
    • Use nightly for cargo fmt in CI (#2519) @curquiza
    • Fix content of dump/assets for testing (#2544) @loiclec
    • Add Dependabot for GHA (#2561) @curquiza
    • Update Docker credentials (#2539) @curquiza
    • Add new CI: cron GHA to create an issue "Update dependencies" (#2585) @VasiliySoldatkin
    • Add a dedicated section for Language Support in the issue template (#2592) @ManyTheFish

    ❤️ Thanks again to our external contributors:

    • Meilisearch: @evpeople, @Mcdostone, @pavo-tusker, @phdavis1027, @ryanrussell, and @VasiliySoldatkin.
    • Milli: @GraDKh.
    • Charabia: @aFluffyHotdog, @matthias-wright, and @mosuka.
    Source code(tar.gz)
    Source code(zip)
    meilisearch-linux-aarch64(114.26 MB)
    meilisearch-linux-amd64(110.94 MB)
    meilisearch-macos-amd64(103.99 MB)
    meilisearch-windows-amd64.exe(102.40 MB)
    meilisearch.deb(18.02 MB)
  • v0.29.0rc4(Sep 14, 2022)

  • v0.29.0rc3(Sep 8, 2022)

    Improvements

    • Update mini-dashboard version to v0.2.2 #2755 @mdubus
    • Update ubuntu version from 18.04 to 20.04 in GHA #2758 @curquiza

    Bug fixes

    • Fix API key bugs (#2730 and #2731 issues) #2734 @ManyTheFish
    • Fix indexing bug introduced in v0.29.0 with huge words in documents #2759 and meilisearch/milli#628 @Kerollmops

    Special thanks to @Northn and @bidoubiwa for the bug reports 🙏

    Source code(tar.gz)
    Source code(zip)
    meilisearch-linux-aarch64(114.28 MB)
    meilisearch-linux-amd64(110.89 MB)
    meilisearch-macos-amd64(104.00 MB)
    meilisearch-windows-amd64.exe(102.36 MB)
  • v0.29.0rc2(Sep 1, 2022)

  • v0.29.0rc0(Aug 29, 2022)

    ⚠️ Since this is a release candidate (RC), we do NOT recommend using this version in production. This is only for test purposes. Please, feel free to report bugs and give feedback about the new feature introductions.

    In this release, we integrated a demanded feature: requiring all query terms to be present in search results. Some users have been stuck in the pre-0.21 versions because of this. We also improved the indexing speed.

    📖 the official documentation is not updated yet, but will be ready for the official v0.29.0 release. The work-in-progress documentation is available here.

    New features and improvements 🔥

    Customize matching strategy

    It's now possible to control how Meilisearch matches documents during search by choosing to return only documents containing all the query words.

    How to activate it?

    curl \
      -X POST 'http://localhost:7700/indexes/movies/search' \
      -H 'Content-Type: application/json' \
      --data-binary '{ "q": "american ninja", "matchingStrategy": "all" }'
    

    Here Meilisearch will only return documents containing "american" AND "ninja".

    By default, Meilisearch will still return documents containing all the query words, followed by documents that don't contain all the query words.

    Check out the documentation.

    Made by @ManyTheFish in #2578 and meilisearch/milli#598.

    Thai language support

    Thai is now supported 🇹🇭

    If your language is missing in Meilisearch, please consider contributing to the Meilisearch tokenizer by following the CONTRIBUTING.md file and integrating your intended normalizer/segmenter.

    The whole core team is available to help you contribute. Feel free to ask for any clarifications!

    Made by our dear contributor @aFluffyHotdog and by @ManyTheFish in meilisearch/charabia#114, meilisearch/charabia#115, meilisearch/milli##611, and #2636.

    Performance improvements for indexing

    We improved the indexing speed, especially for filterableAttributes and document update and deletion.

    For more information on the main improvements, check out the following issues: meilisearch/product#513 and meilisearch/product#520.

    Made by @loiclec and @irevoire in #2689, #2690, meilisearch/milli#607, meilisearch/milli#606, meilisearch/milli#587, meilisearch/milli#557,meilisearch/milli#579, and meilisearch/milli#590.

    Filtering: introduce the EXISTS and IN operators

    You can now use the EXISTS and IN operators with the filter search parameter during search.

    With the following set of documents:

    { "id": 1, "product": "T-shirt", "price": 20, "color": "yellow" }
    { "id": 2, "product": "T-shirt",              "color": "red" }
    { "id": 3, "product": "T-shirt", "price": 30 }
    { "id": 4, "product": "T-shirt", "price": 40 }
    
    • The filter price EXISTS will select documents 1, 3, and 4.
    • The filter price IN [30, 20] will select documents 1 and 3.

    These operators can be combined with the existing NOT (!=) operator. More about filtering.

    Made by @loiclec in #2636, meilisearch/milli#596, and meilisearch/milli#556.

    Key management

    When managing keys, the * helper can now be used to express a set of actions in the actions array.

    For example, instead of specifying indexes.create, indexes.get, indexes.update, indexes.delete; you can now use indexes.*.

    Made by our dear contributors @Mcdostone and @phdavis1027 in #2080 and #2579.

    Behavior changes ⚠️

    Auto-batching

    This previously experimental feature is now activated by default.

    For people who activated it in previous versions using --enable-auto-batching, you need to remove this flag when running Meilisearch. All the previous settings (--debounce-duration-sec, --max-batch-size and --max-documents-per-batch) have been removed.

    For people who hadn't activated it, it does not change anything but increases the indexing speed 🏎️

    If there are any issues during indexing, the --disable-auto-batching flag (or the environment variable MEILI_DISABLE_AUTO_BATCHING) is available.

    Made by @Kerollmops in meilisearch/milli#561, #2523, and #2677.

    != (NOT) filter operator

    This behavior change is consistent with the EXISTS and IN operators. The NOT filter now also matches documents that don't have the related attributes. More explanation with examples here.

    Made by @loiclec in #2636, and meilisearch/milli#596.

    Fixes 🐞

    • Clamp databases max size to a multiple of system page size (#2662) @ManyTheFish
    • Prevent removing whitespace trimming during document id validation (#2636 and meilisearch/milli#599) @ManyTheFish
    • Support https in print_launch_resume (#2664) @evpeople
    • Filters can not accept unquoted reserved keywords as field names/values (#2636 and meilisearch/milli#596) @loiclec
    • Fix filtering selection (#2636 and meilisearch/milli#568) @GraDKh

    Misc

    • Completely rework the README (#2504) @CaroFG, @curquiza, @guimachiavelli, and @gmourier
    • Add analytics to the /stats routes (#2674) @irevoire
    • Update link to Cloud beta form (#2625) @davelarkan
    • Internal feature only: integrate /metrics route (#2657) @pavo-tusker
    • Fix typo (#2508, #2517, #2556) @ryanrussell
    • Use nightly for cargo fmt in CI (#2519) @curquiza
    • Fix content of dump/assets for testing (#2544) @loiclec
    • Add Dependabot for GHA (#2561) @curquiza
    • Update Docker credentials (#2539) @curquiza
    • Add new CI: cron GHA to create an issue "Update dependencies" (#2585) @VasiliySoldatkin
    • Add a dedicated section for Language Support in the issue template (#2592) @ManyTheFish

    ❤️ Thanks again to our external contributors:

    • Meilisearch: @evpeople, @Mcdostone, @pavo-tusker, @phdavis1027, @ryanrussell, and @VasiliySoldatkin.
    • Milli: @GraDKh.
    • Charabia: @aFluffyHotdog, @matthias-wright, and @mosuka.
    Source code(tar.gz)
    Source code(zip)
    meilisearch-linux-amd64(109.53 MB)
    meilisearch-macos-amd64(104.19 MB)
    meilisearch-windows-amd64.exe(103.16 MB)
  • v0.28.1(Jul 21, 2022)

    ⚠️ If possible, use v0.28.1 instead of v0.28.0 to include the following fixes:

    • Update mini-dashboard to v0.2.1 (#2631) @mdubus
    • Fix: all the words are now highlighted in _formatted when using attributesToCrop + attributesToHighlight (https://github.com/meilisearch/milli/pull/592 and #2633) @ManyTheFish
    Source code(tar.gz)
    Source code(zip)
    meilisearch-linux-aarch64(124.85 MB)
    meilisearch-linux-amd64(120.38 MB)
    meilisearch-macos-amd64(106.65 MB)
    meilisearch-windows-amd64.exe(103.13 MB)
    meilisearch.deb(17.99 MB)
  • v0.28.0(Jul 11, 2022)

    ⚠️ If possible, use v0.28.1 instead of this version (v0.28.0) to include the highlight fix available in v0.28.1

    The main goal of this new release is to stabilize the Meilisearch API 🚀

    This release introduces a lot of breaking changes (especially regarding names), and we are sorry for this. The purpose is to guarantee what we care about the most—providing the best search engine experience—by stabilizing the Meilisearch API. There should not be any breaking changes to the API in the future.

    New features 🚀

    Smart crop

    The smart crop is an improvement of the Meilisearch crop.

    The cropping algorithm tries to find the window(s) with the highest density of query terms within the cropLength limit. From these, it picks the window that contains the most query terms in order.

    Done by @ManyTheFish (#2408)

    API key management: deterministic keys

    • It is now possible to create a deterministic key value by specifying a uid field at creation. uid value must be a UUID v4. If omitted, Meilisearch generates it.

    The key field is generated by hashing the master key and the uid:

    echo -n $HYPHENATED_UUID | openssl dgst -sha256 -hmac $MASTER_KEY
    

    As a result, key values are deterministic between instances sharing the same configuration. Since the key field depends on the master key, it is not propagated to dumps and snapshots. If a malicious user ever gets access to your dumps or snapshots, they will not have access to your instance's API keys.

    • Adds a name field: specify a human-readable name to make API key retrieval more convenient.
    • Introduces new actions to manage API keys (keys.get, keys.create, keys.update, keys.delete).
    • It is no longer possible to update an API key's actions, indexes, or expiresAt after creation.

    Done by @ManyTheFish in #2438, #2451, #2475, and #2474

    Hebrew language support

    New language support: Hebrew, using the Niqqud library.

    Done by the amazing @benny-n in meilisearch/charabia#101.

    New tokenizer contribution experience: add your language to Meilisearch

    The contribution experience in the tokenizer has been significantly improved.

    If your language is missing in Meilisearch, please consider contributing to the Meilisearch tokenizer by following the CONTRIBUTING.md file and integrating your intended normalizer/segmenter.

    The whole core team is available to help you contribute. Feel free to ask for any clarifications you need!

    Done by @ManyTheFish, @loiclec @gmourier, and @curquiza.

    Customizable limits

    Limit of facet values

    When searching using the facets search parameter, Meilisearch will now return a maximum of 100 different facet values per faceted attribute.

    This default limit is customizable using the new faceting setting, accessible via the /indexes/{uid}/settings/faceting route.

    To increase this limit to 3000:

    curl \
      -X PATCH 'http://localhost:7700/indexes/books/settings/faceting' \
      -H 'Content-Type: application/json' \
      --data-binary '{
        "maxValuesPerFacet": 3000
      }'
    

    You can also get the value using the HTTP GET verb, or reset the value using the DELETE verb.

    Done by @Kerollmops in meilisearch/milli#550 and #2494

    Limit of documents returned by search

    When making a search request, Meilisearch returns a maximum of 1000 documents: the documents deemed most relevant to the query.

    This default limit is now customizable using the pagination setting, accessible via the /indexes/{uid}/settings/pagination route.

    To increase this limit to 2000:

    curl \
      -X PATCH 'http://localhost:7700/indexes/books/settings/pagination' \
      -H 'Content-Type: application/json' \
      --data-binary '{
        "maxTotalHits": 2000
      }'
    

    You can also get the value using the HTTP GET verb, or reset the value using the DELETE verb.

    Done by @Kerollmops in meilisearch/milli#550 and #2494

    Breaking changes and improvement ⚠️

    For most of the following changes, if you use one of our SDKs, these changes will be transparent for you by only updating to the latest version of the SDK.

    Changes in /indexes/{uid}/search endpoint

    • nbHits is renamed estimatedTotalHits. Some users were confused by the old name and used it for their pagination, which we discourage. Please check out this fresh new guide to learn how to paginate with Meilisearch without using nbHits.
    • The facetsDistribution search parameter is renamed facets
    • The facetsDistribution field in the response body is renamed facetDistribution
    • The matches search parameter is renamed showMatchesPosition
    • The _matchesInfo field in the response body is renamed _matchesPosition
    • exhaustiveNbHits and exhaustiveFacetsCount are removed. Meilisearch does not return exhaustive hit or facet counts at this time.

    Done by @irevoire in #2406.

    Changes in /indexes endpoints

    • When getting the index list (GET /indexes), the response is now paginated. That means:
      • You can use the offset and limit parameters to browse indexes.
      • The indexes are returned in the results field in the response body.
      • limit, offset, and total now appear in the response body.
    • The endpoint to update an index is now PATCH /indexes/{indexUid} instead of PUT
    • The already deprecated name field has now been removed entirely.

    Done by @irevoire and @Kerollmops in #2423, #2452, and #2454.

    Changes in indexes/{uid}/documents endpoints

    • When getting the documents list (GET /indexes/{uid}/documents), pagination has been improved. That means:
      • You can still use the offset and limit parameters to browse documents.
      • The documents are returned in the results field in the response body.
      • limit, offset, and total now appear in the response body.
    • When getting documents via the GET /indexes/{uid}/documents route, the attributesToRetrieve parameter has been renamed fields
    • The fields parameter is also available for the GET /indexes/{uid}/documents/{document_uid} endpoint.
    • The displayedAttributes setting does not impact GET indexes/{uid}/documents anymore.

    Done by @irevoire in #2372, #2433, and #2454.

    Changes in /tasks and /indexes/{uid}/tasks endpoints

    • You can now filter on the GET /tasks endpoint:
      • Filtering is possible on the type, status, and indexUid fields.
      • Use the , character to specify several values for a filter, e.g. ?status=enqueued,processing. This is equivalent to an OR operation.
      • Use the & character to apply multiple filters, e.g. ?status=enqueued&type=indexCreation. This is equivalent to an AND operation.
    • Add keyset pagination on the GET /tasks endpoint, allowing users to browse multiple sets of task items.
      • Use the limit and from query parameters to browse tasks.
      • limit, from, and next now appear in the response body.
    • GET /indexes/:indexUid/tasks has been removed. It can be replaced by GET /tasks?indexUid=:indexUid
    • GET /indexes/:indexUid/tasks/:taskUid has been removed.
    • uid has been renamed taskUid in the response body returned by every asynchronous task (e.g. index creation, document addition, etc...)
    • Some task properties have been renamed
      • documentPartial-> documentAdditionOrUpdate
      • documentAddition-> documentAdditionOrUpdate
      • clearAll -> documentDeletion

    Done by Kerollmops in #2399 and #2445.

    Changes regarding dumps

    • Dump creation is now an asynchronous task.
    • Dump tasks are placed at the end of the task queue, but processed in priority.
      • In other words, a dump will run as soon as the current task is finished processing.
      • The dump's uid will reflect when it was enqueued in relation to the other tasks, not when it was processed.
    • POST /dumps now returns 202 like any other asynchronous operation (e.g. index creation, document addition...)
    • The GET /dumps/:dump_uid/status endpoint has been removed. It can be replaced by GET /tasks?type=dumpCreation.
    • The dump_already_processing error has been removed since dumps can now be enqueued.

    Done by @MarinPostma in #2410

    Changes in /keys endpoint

    • Tenant tokens: apiKeyPrefix has been renamed apiKeyUid.
    • It is no longer possible to update actions, indexes, or expiresAt after key creation. Only the name and description fields are updatable.
    • When getting the keys list (GET /keys), the response is now paginated. That means:
      • You can use the offset and limit parameters to browse keys.
      • limit, offset, and total now appear in the response body.
    • Due to changes to the keys resource, dumps are not fully compatible with API keys. As a result, keys imported from an old version of Meilisearch will have their key and uid fields regenerated. In other words, you will need to update your keys. Other key fields such as actions and indexes will not be affected.
    • The dumps.get action has been removed.

    Done by @ManyTheFish in #2438, #2451, #2475, and #2474)

    Changes in /indexes/{uid}/settings endpoints

    The following changes only concern the HTTP verb associated with a given method.

    • The endpoint to update the global settings is now PATCH /indexes/{indexUid}/settings instead of POST
    • The endpoint to update the typo tolerance settings is now PATCH /indexes/{indexUid}/settings/typo-tolerance instead of POST
    • The endpoint to update the displayed attributes settings is now PUT /indexes/{indexUid}/settings/displayed-attributes instead of POST
    • The endpoint to update the distinct attribute settings is now PUT /indexes/{indexUid}/settings/distinct-attribute instead of POST
    • The endpoint to update the filterable attribute settings is now PUT /indexes/{indexUid}/settings/filterable-attributes instead of POST
    • The endpoint to update the ranking rules settings is now PUT /indexes/{indexUid}/settings/ranking-rules instead of POST
    • The endpoint to update the searchable attributes settings is now PUT /indexes/{indexUid}/settings/searchable-attributes instead of POST
    • The endpoint to update the sortable attributes settings is now PUT /indexes/{indexUid}/settings/sortable-attributes instead of POST
    • The endpoint to update the stop words settings is now PUT /indexes/{indexUid}/settings/stop-words instead of POST
    • The endpoint to update the synonyms settings is now PUT /indexes/{indexUid}/settings/synonyms instead of POST

    Done by @Kerollmops in #2452

    Other improvements 🔨

    • Geosearch: Support string type for _geo, lat, and lng fields (#2408 and meilisearch/milli#523) @irevoire
    • Improve ranking rules error message (meilisearch/milli#536, #2468) @matthias-wright
    • Improve docker CI: push vX.Y tag (without patch) to Docker Hub (#2529) @janithpet
    • Remove the connection keep-alive timeout (#2471) @Thearas
    • Improve index uid validation upon API key creation (#2414) @pierre-l
    • Improve estimatedTotalHits behavior with distinct attribute (#2546) @Kerollmops

    Fixes 🐞

    • Fix filtering on documents with double and/or single quote characters (#2500 and meilisearch/milli#552) @irevoire

    Misc

    • Telemetry: handle the X-Meilisearch-Client header (#2374) @irevoire
    • Telemetry: send the analytics to telemetry.meilisearch.com instead of segment (#2429) @irevoire
    • Create custom error types for TaskType, TaskStatus, and IndexUid (#2460) @walterbm
    • Improve the Docker CIs (#2477 and #2491) @choznerol and @curquiza
    • Some internal changes (#2447, #2464, #2453, #2455) @MarinPostma @Kerollmops
    • Update dependencies (#2450) @Kerollmops
    • Add dump tests in CI (#2357) @irevoire
    • Deny warnings in CI (#2339) @MarinPostma
    • Update mini-dashboard for v0.28.0 (#2587) @mdubus @bidoubiwa
    • Change Nelson path (#2347) @curquiza
    • Re-integrate Clippy in the CI (#2424) @irevoire
    • Fix typo in README (#2448) @ryanrussell
    • Fix typo in code base comments (#2459, and #2508) @ryanrussell
    • Update url of movies.json in README (#2422) @0x0x1
    • Fix command in README (#2434) @0x0x1

    ❤️ Thanks again to our external contributors:

    • Meilisearch: @0x0x1, @choznerol, @janithpet, @pierre-l, @ryanrussell, @Thearas, and @walterbm
    • Milli: @matthias-wright
    • Charabia: @benny-n
    Source code(tar.gz)
    Source code(zip)
    meilisearch-linux-aarch64(124.91 MB)
    meilisearch-linux-amd64(120.50 MB)
    meilisearch-macos-amd64(106.76 MB)
    meilisearch-windows-amd64.exe(103.26 MB)
    meilisearch.deb(18.00 MB)
  • v0.28.0rc2(Jul 6, 2022)

  • v0.28.0rc1(Jun 27, 2022)

    Fixes / Improvements

    • * not working on GET /search route for attributesToHighlight/attributesToCrop (#2527) @irevoire
    • Cannot access pagination and faceting settings via the settings sub routes (#2524) @Kerollmops
    • Smart crop add an extra space in _formatted field (#2546) @ManyTheFish and @Kerollmops
    • Rename settings limitedTo into maxTotalHits (#2546) @Kerollmops
    • Wrong nbHits when using distinct attribute (#2546) @Kerollmops

    Misc

    • Check the version in Cargo.toml before publishing (#2530) @curquiza
    • Publish Docker image tag without the patch version -> v0.28 docker tag will be available! (#2507 and #2529) @janithpet @curquiza
    Source code(tar.gz)
    Source code(zip)
    meilisearch-linux-aarch64(124.46 MB)
    meilisearch-linux-amd64(120.74 MB)
    meilisearch-macos-amd64(106.93 MB)
    meilisearch-windows-amd64.exe(103.38 MB)
  • v0.28.0rc0(Jun 13, 2022)

    The main goal of this new release is to stabilize the Meilisearch API 🚀

    This release introduces a lot of breaking changes (especially regarding names), and we are sorry for this. The purpose is to guarantee what we care about the most—providing the best search engine experience—by stabilizing the Meilisearch API. There should not be any breaking changes to the API in the future.

    ⚠️ Since this is a release candidate (RC), the official documentation is not updated yet, but will be ready for the official v0.28.0 release. The work-in-progress documentation is available here.

    New features 🚀

    Smart crop

    The smart crop is an improvement of the Meilisearch crop.

    The cropping algorithm tries to find the window(s) with the highest density of query terms within the cropLength limit. From these, it picks the window that contains the most query terms in order.

    Done by @ManyTheFish (#2408)

    API key management: deterministic keys

    • It is now possible to create a deterministic key value by specifying a uid field at creation. uid value must be a UUID v4. If omitted, Meilisearch generates it.
    • Adds a name field: specify a human-readable name to make API key retrieval more convenient.
    • Introduces new actions to manage API keys (keys.get, keys.create, keys.update, keys.delete).
    • It is no longer possible to update an API key's actions, indexes, or expiresAt after creation.

    Done by @ManyTheFish in #2438, #2451, #2475, and #2474)

    Hebrew language support

    New language support: Hebrew, using the Niqqud library.

    Done by the amazing @benny-n in meilisearch/charabia#101.

    New tokenizer contribution experience: add your language to Meilisearch

    The contribution experience in the tokenizer has been significantly improved.

    If your language is missing in Meilisearch, please consider contributing to the Meilisearch tokenizer by following the CONTRIBUTING.md file and integrating your intended normalizer/segmenter.

    The whole core team is available to help you contribute. Feel free to ask for any clarifications you need!

    Done by @ManyTheFish, @loiclec @gmourier, and @curquiza.

    Customizable limits

    Limit of facet values

    When searching using the facets search parameter, Meilisearch will now return a maximum of 100 different facet values per faceted attribute.

    This default limit is customizable using the new faceting setting, accessible via the /indexes/{uid}/settings/faceting route.

    To increase this limit to 3000:

    curl \
      -X PATCH 'http://localhost:7700/indexes/books/settings/faceting' \
      -H 'Content-Type: application/json' \
      --data-binary '{
        "maxValuesPerFacet": 3000
      }'
    

    You can also get the value using the HTTP GET verb, or reset the value using the DELETE verb.

    Done by @Kerollmops in meilisearch/milli#550 and #2494

    Limit of documents returned by search

    When making a search request, Meilisearch returns a maximum of 1000 documents: the documents deemed most relevant to the query.

    This default limit is now customizable using the pagination setting, accessible via the /indexes/{uid}/settings/pagination route.

    To increase this limit to 2000:

    curl \
      -X PATCH 'http://localhost:7700/indexes/books/settings/pagination' \
      -H 'Content-Type: application/json' \
      --data-binary '{
        "limitedTo": 2000
      }'
    

    You can also get the value using the HTTP GET verb, or reset the value using the DELETE verb.

    Done by @Kerollmops in meilisearch/milli#550 and #2494

    Breaking changes and improvement ⚠️

    Changes in /indexes/{uid}/search endpoint

    • nbHits is renamed estimatedTotalHits. Some users were confused by the old name and used it for their pagination, which we discourage.
    • The facetsDistribution search parameter is renamed facets
    • The facetsDistribution field in the response body is renamed facetDistribution
    • The matches search parameter is renamed showMatchesPosition
    • The _matchesInfo field in the response body is renamed _matchesPosition
    • exhaustiveNbHits and exhaustiveFacetsCount are removed. Meilisearch does not return exhaustive hit or facet counts at this time.

    Done by @irevoire in #2406.

    Changes in /indexes endpoints

    • When getting the index list (GET /indexes), the response is now paginated. That means:
      • You can use the offset and limit parameters to browse indexes.
      • The indexes are returned in the results field in the response body.
      • limit, offset, and total now appear in the response body.
    • The endpoint to update an index is now PATCH /indexes/{indexUid} instead of PUT
    • The already deprecated name field has now been removed entirely.

    Done by @irevoire and @Kerollmops in #2423, #2452, and #2454.

    Changes in indexes/{uid}/documents endpoints

    • When getting the documents list (GET /indexes/{uid}/documents), pagination has been improved. That means:
      • You can still use the offset and limit parameters to browse documents.
      • The documents are returned in the results field in the response body.
      • limit, offset, and total now appear in the response body.
    • When getting documents via the GET /indexes/{uid}/documents route, the attributesToRetrieve parameter has been renamed fields
    • The fields parameter is also available for the GET /indexes/{uid}/documents/{document_uid} endpoint.
    • The displayedAttributes setting does not impact GET indexes/{uid}/documents anymore.

    Done by @irevoire in #2372, #2433, and #2454.

    Changes in /tasks and /indexes/{uid}/tasks endpoints

    • You can now filter on the GET /tasks endpoint:
      • Filtering is possible on the type, status, and indexUid fields.
      • Use the , character to specify several values for a filter, e.g. ?status=enqueued,processing. This is equivalent to an OR operation.
      • Use the & character to apply multiple filters, e.g. ?status=enqueued&type=indexCreation. This is equivalent to an AND operation.
    • Add keyset pagination on the GET /tasks endpoint, allowing users to browse multiple sets of task items.
      • Use the limit and from query parameters to browse tasks.
      • limit, from, and next now appear in the response body.
    • GET /indexes/:indexUid/tasks has been removed. It can be replaced by GET /tasks?indexUid=:indexUid
    • GET /indexes/:indexUid/tasks/:taskUid has been removed.
    • uid has been renamed taskUid in the response body returned by every asynchronous task (e.g. index creation, document addition, etc...)
    • Some task properties have been renamed
      • documentPartial-> documentAdditionOrUpdate
      • documentAddition-> documentAdditionOrUpdate
      • clearAll -> documentDeletion

    Done by Kerollmops in #2399 and #2445.

    Changes regarding dumps

    • Dump creation is now an asynchronous task.
    • Dump tasks are placed at the end of the task queue, but processed in priority.
      • In other words, a dump will run as soon as the current task is finished processing.
      • The dump's uid will reflect when it was enqueued in relation to the other tasks, not when it was processed.
    • POST /dumps now returns 202 like any other asynchronous operation (e.g. index creation, document addition...
    • The GET /dumps/:dump_uid/status endpoint has been removed. It can be replaced by GET /tasks?type=dumpCreation.
    • The dump_already_processing error has been removed since dumps can now be enqueued.

    Done by @MarinPostma in #2410

    Changes in /keys endpoint

    • Tenant tokens: apiKeyPrefix has been renamed apiKeyUid.
    • It is no longer possible to update actions, indexes, or expiresAt after key creation. Only the name and description fields are updatable.
    • When getting the keys list (GET /keys), the response is now paginated. That means:
      • You can use the offset and limit parameters to browse keys.
      • limit, offset, and total now appear in the response body.
    • Due to changes to the keys resource, dumps are not fully compatible with API keys. As a result, keys imported from an old version of Meilisearch will have their key and uid fields regenerated. In other words, you will need to update your keys. Other key fields such as actions and indexes will not be affected.
    • The dumps.get action has been removed.

    Done by @ManyTheFish in #2438, #2451, #2475, and #2474)

    Changes in /indexes/{uid}/settings endpoints

    The following changes only concern the HTTP verb associated with a given method.

    • The endpoint to update the global settings is now PATCH /indexes/{indexUid}/settings instead of POST
    • The endpoint to update the typo tolerance settings is now PATCH /indexes/{indexUid}/settings/typo-tolerance instead of POST
    • The endpoint to update the displayed attributes settings is now PUT /indexes/{indexUid}/settings/displayed-attributes instead of POST
    • The endpoint to update the distinct attribute settings is now PUT /indexes/{indexUid}/settings/distinct-attribute instead of POST
    • The endpoint to update the filterable attribute settings is now PUT /indexes/{indexUid}/settings/filterable-attributes instead of POST
    • The endpoint to update the ranking rules settings is now PUT /indexes/{indexUid}/settings/ranking-rules instead of POST
    • The endpoint to update the searchable attributes settings is now PUT /indexes/{indexUid}/settings/searchable-attributes instead of POST
    • The endpoint to update the sortable attributes settings is now PUT /indexes/{indexUid}/settings/sortable-attributes instead of POST
    • The endpoint to update the stop words settings is now PUT /indexes/{indexUid}/settings/stop-words instead of POST
    • The endpoint to update the synonyms settings is now PUT /indexes/{indexUid}/settings/synonyms instead of POST

    Done by @Kerollmops in #2452

    Other improvements 🔨

    • Geosearch: Support string type for _geo, lat, and lng fields (#2408 and meilisearch/milli#523) @irevoire
    • Improve ranking rules error message (meilisearch/milli#536, #2468) @matthias-wright
    • Remove the connection keep-alive timeout (#2471) @Thearas
    • Improve index uid validation upon API key creation (#2414) @pierre-l

    Fixes 🐞

    • Fix filtering on documents with double and/or single quote characters (#2500 and meilisearch/milli#552) @irevoire

    Misc

    • Telemetry: handle the X-Meilisearch-Client header (#2374) @irevoire
    • Telemetry: send the analytics to telemetry.meilisearch.com instead of segment (#2429) @irevoire
    • Create custom error types for TaskType, TaskStatus, and IndexUid (#2460) @walterbm
    • Improve the Docker CIs (#2477 and #2491) @choznerol and @curquiza
    • Some internal changes (#2447, #2464, #2453, #2455) @MarinPostma @Kerollmops
    • Update dependencies (#2450) @Kerollmops
    • Add dump tests in CI (#2357) @irevoire
    • Deny warnings in CI (#2339) @MarinPostma
    • Change Nelson path (#2347) @curquiza
    • Re-integrate Clippy in the CI (#2424) @irevoire
    • Fix typo in README (#2448) @ryanrussell
    • Fix typo in code base comments (#2459, and #2508) @ryanrussell
    • Update url of movies.json in README (#2422) @0x0x1
    • Fix command in README (#2434) @0x0x1

    ❤️ Thanks again to our external contributors:

    • Meilisearch: @0x0x1, @choznerol, @pierre-l, @ryanrussell, @Thearas, and @walterbm
    • Milli: @matthias-wright
    • Charabia: @benny-n
    Source code(tar.gz)
    Source code(zip)
    meilisearch-linux-aarch64(125.04 MB)
    meilisearch-linux-amd64(120.64 MB)
    meilisearch-macos-amd64(106.86 MB)
    meilisearch-windows-amd64.exe(103.28 MB)
  • v0.27.2(Jun 7, 2022)

  • v0.27.1(May 17, 2022)

    ⚠️ Use v0.27.1 instead of v0.27.0 if possible

    • Fix dumps bug during import (#2396) @MarinPostma
    • Fix geosearch bug when using mixed datasets (#2397 and https://github.com/meilisearch/milli/pull/529) @irevoire
    • Fix nested bug when using searchable attributes (#2397 and https://github.com/meilisearch/milli/pull/528) @irevoire

    Thank you @leopku, @martinmaillard and @Thearas for the bug reports ❤️

    Source code(tar.gz)
    Source code(zip)
    meilisearch-linux-aarch64(120.64 MB)
    meilisearch-linux-amd64(120.84 MB)
    meilisearch-macos-amd64(108.17 MB)
    meilisearch-windows-amd64.exe(105.99 MB)
    meilisearch.deb(18.24 MB)
Owner
MeiliSearch
Meili provides an open-source Instant Search Engine
MeiliSearch
Shogun search - Learning the principle of search engine. This is the first time I've written Rust.

shogun_search Learning the principle of search engine. This is the first time I've written Rust. A search engine written in Rust. Current Features: Bu

Yuxiang Liu 5 Mar 9, 2022
🔍TinySearch is a lightweight, fast, full-text search engine. It is designed for static websites.

tinysearch TinySearch is a lightweight, fast, full-text search engine. It is designed for static websites. TinySearch is written in Rust, and then com

null 2.2k Dec 31, 2022
⚡ Insanely fast, 🌟 Feature-rich searching. lnx is the adaptable deployment of the tantivy search engine you never knew you wanted. Standing on the shoulders of giants.

✨ Feature Rich | ⚡ Insanely Fast An ultra-fast, adaptable deployment of the tantivy search engine via REST. ?? Standing On The Shoulders of Giants lnx

lnx 679 Jan 1, 2023
⚡ Insanely fast, 🌟 Feature-rich searching. lnx is the adaptable deployment of the tantivy search engine you never knew you wanted. Standing on the shoulders of giants.

✨ Feature Rich | ⚡ Insanely Fast An ultra-fast, adaptable deployment of the tantivy search engine via REST. ?? Standing On The Shoulders of Giants lnx

lnx 0 Apr 25, 2022
A simple and lightweight fuzzy search engine that works in memory, searching for similar strings (a pun here).

simsearch A simple and lightweight fuzzy search engine that works in memory, searching for similar strings (a pun here). Documentation Usage Add the f

Andy Lok 116 Dec 10, 2022
Perlin: An Efficient and Ergonomic Document Search-Engine

Table of Contents 1. Perlin Perlin Perlin is a free and open-source document search engine library build on top of perlin-core. Since the first releas

CurrySoftware GmbH 70 Dec 9, 2022
Tantivy is a full-text search engine library inspired by Apache Lucene and written in Rust

Tantivy is a full text search engine library written in Rust. It is closer to Apache Lucene than to Elasticsearch or Apache Solr in the sense it is no

tantivy 7.4k Dec 28, 2022
Tantivy is a full-text search engine library inspired by Apache Lucene and written in Rust

Tantivy is a full-text search engine library written in Rust. It is closer to Apache Lucene than to Elasticsearch or Apache Solr in the sense it is no

Quickwit OSS 7.5k Jan 9, 2023
Configurable quick search engine shortcuts for your terminal and browser.

Quicksearch Configurable quick search engine shortcuts for your terminal and browser. Installation Run cargo install quicksearch to install Configurat

Rahul Pai 2 Oct 14, 2022
High-performance log search engine.

NOTE: This project is under development, please do not depend on it yet as things may break. MinSQL MinSQL is a log search engine designed with simpli

High Performance, Kubernetes Native Object Storage 359 Nov 27, 2022
AI-powered search engine for Rust

txtai: AI-powered search engine for Rust txtai executes machine-learning workflows to transform data and build AI-powered text indices to perform simi

NeuML 69 Jan 2, 2023
A full-text search engine in rust

Toshi A Full-Text Search Engine in Rust Please note that this is far from production ready, also Toshi is still under active development, I'm just slo

Toshi Search 3.8k Jan 7, 2023
Cross-platform, cross-browser, cross-search-engine duckduckgo-like bangs

localbang Cross-platform, cross-browser, cross-search-engine duckduckgo-like bangs What are "bangs"?? Bangs are a way to define where to search inside

Jakob Kruse 7 Nov 23, 2022
A Rust API search engine

Roogle Roogle is a Rust API search engine, which allows you to search functions by names and type signatures. Progress Available Queries Function quer

Roogle 342 Dec 26, 2022
Tantivy is a full text search engine library written in Rust.

Tantivy is a full text search engine library written in Rust. It is closer to Apache Lucene than to Elasticsearch or Apache Solr in the sense it is no

Quickwit OSS 7.4k Dec 30, 2022
Python bindings for Milli, the embeddable Rust-based search engine powering Meilisearch

milli-py Python bindings for Milli, the embeddable Rust-based search engine powering Meilisearch. Due to limitations around Rust lifecycles, methods a

Alexandro Sanchez 92 Feb 21, 2023
weggli is a fast and robust semantic search tool for C and C++ codebases. It is designed to help security researchers identify interesting functionality in large codebases.

weggli Introduction weggli is a fast and robust semantic search tool for C and C++ codebases. It is designed to help security researchers identify int

Google Project Zero 2k Jan 5, 2023
🔎 Impossibly fast web search, made for static sites.

Stork Impossibly fast web search, made for static sites. Stork is two things. First, it's an indexer: it indexes your loosely-structured content and c

James Little 2.5k Dec 27, 2022
🦔 Fast, lightweight & schema-less search backend. An alternative to Elasticsearch that runs on a few MBs of RAM.

?? Fast, lightweight & schema-less search backend. An alternative to Elasticsearch that runs on a few MBs of RAM.

Valerian Saliou 17.4k Jan 2, 2023